在用户下载之前调整图像大小?

时间:2011-05-14 20:23:05

标签: php javascript html

所以这无疑会成为一个无知人士的愚蠢问题,但我想知道在用户下载之前是否有任何简单的方法来调整图像大小?

我从第三方数据库中提取图像,我无法控制。我也不允许在他们的T& C下缓存任何内容。

他们为每张图片提供了几种不同的尺寸。但我最终用CSS调整了一半在我的页面上。

所以我想知道是否可能使用php或javascript等等! (我真的不知道),我可以在用户浪费时间下载更大版本之前调整这些图像的大小。

我真正要求的唯一原因是,我知道曼联网站有这样的做法(借助我认为的一些Adobe的东西),所以我想也许有些东西可能有人可以使用?

http://www.manutd.com/en/News-And-Features/Football-News/2011/May/Sir-Alex-Blackburn-reaction.aspx

http://www.manutd.com/~/media/64B766EE4A37488AA65DC7B08E5ABC1B.ashx?h=179&la=ar-SA&w=480&rgn=0,78,1200,524 - > 18kb与160kb相比 - > http://www.manutd.com/~/media/64B766EE4A37488AA65DC7B08E5ABC1B.ashx

(显然我不想要裁剪技术)

5 个答案:

答案 0 :(得分:2)

如果图像来自您无法控制的服务器,则简短回答为NO。您下载之前无法调整图像大小。如果不缓存调整大小的版本,您将受第三方服务器的支配。除非你使用服务器端代理程序,否则这可能比它的价值更麻烦。

然而正如我在评论中指出的那样,http://www.manutd.com会为你调整图像大小。在链接h = height,w = width和rgn = region(left,top,right,bottom)

http://www.manutd.com/~/media/64B766EE4A37488AA65DC7B08E5ABC1B.ashx?h=80&la=ar-SA&w=120&rgn=0,0,1200,800

你只需要h和w。如果你的h和w与图像的方面不匹配,它将裁剪而不是倾斜。看看这两个。图像为1200x800纵横比3x2

w = 240,h = 160 3x2(整个图像)

http://www.manutd.com/~/media/64B766EE4A37488AA65DC7B08E5ABC1B.ashx?w=240&h=160

w = 160,h = 160 1x1(裁剪)

http://www.manutd.com/~/media/64B766EE4A37488AA65DC7B08E5ABC1B.ashx?w=160&h=160

在我玩了更多之后,你可以只用宽度(w),而我假设这也适用于高度。 (编辑:是的)

整个图像,480像素宽...

http://www.manutd.com/~/media/64B766EE4A37488AA65DC7B08E5ABC1B.ashx?w=480

更多编辑:了解,任何时候你看到'?'在网址中,您要求程序中的页面,以及“?”之后的内容是程序的参数,'&'分离参数。 manutd.com上的服务器正在使用程序来调整图像大小,就像代理程序会为您调整图像大小一样。如果您确实使用了代理程序,如果它是一个不错的代理程序,它会使用像http://YourServer.host/proxyProgram.php?img=imageHost.org/imageName.jpg&w=240&h=160这样的链接给出一个链接,例如有各种服务器端解决方案来调整图像大小。

然而,如果没有缓存,您可能会多次调整同一图像的大小,而只是想到这会让我失望。

我现在要退出编辑了!

玩得开心!

跳过

答案 1 :(得分:1)

尝试将ImageMagick用于PHP。它允许您调整服务器端的图像大小和修改。有一些例子here

答案 2 :(得分:1)

在我的脑海中,这是一个非常丑陋的方式来完成它:

创建一个接收所有请求的PHP页面。所以不要这样做......

<img src="http://other.domain/img.jpg" />

这样做:

<img src="http://your.domain/images.php?name=img.jpg" />

然后让您的PHP页面从第三方网站获取图像,并以您需要的任何大小重新创建它:

$newe = imagecreatetruecolor($width, $height);
$old = imagecreatefromjpeg($fullpath);
$oldSizes = getimagesize($fullpath);
imagecopyresampled($newe, $old, 0, 0, 0, 0, $width, $height, imagesx($old), imagesy($old));

header('Content-type: image/jpeg');
echo $newe;

可能会引起争议的一些事情:

  • 如果T&amp; C不允许缓存图像,则可能不允许您使用服务器端代码访问其图像。
  • 如果您正在使用其他图像类型(gif,png),则必须调整部分代码

答案 3 :(得分:0)

这必须在服务器上完成。使用的技术取决于您在服务器上使用的内容。如果它是.NET,则有内置功能来处理调整大小。

答案 4 :(得分:0)

@ Taze服务器方面,但他从另一台服务器获取图像,似乎你没有读到他正在做什么以及他可以做什么。

理论上你可以在自己的服务器上缓存它(你不允许这样做),用gdlib或imagemagick调整它并将其交给用户,然后从服务器中删除副本

但这违反了第三方的规则