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

Resize an image before user downloads it?

本文关键字:图像 调整 用户 下载      更新时间:2023-09-26

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

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

他们为每个图像提供几种不同的尺寸。但是我最终使用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

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

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

然而,正如我在评论中指出的那样,http://www.manutd.com 将为您调整图像大小。在链接中 h=高度,w=宽度和rgn=区域(左,上,右,下)

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),我假设这也适用于高度。(编辑:是的,确实如此)

整个图像,480px宽...

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

更多编辑:理解,任何时候你在URL中看到"?",你正在从程序请求页面,"?"后面的内容是程序的参数,"&"分隔参数。manutd.com 的服务器正在使用程序来调整其图像大小,就像代理程序会为您调整图像大小一样。如果您确实求助于代理程序,如果它是一个不错的程序,它将需要一个链接,例如http://YourServer.host/proxyProgram.php?img=imageHost.org/imageName.jpg&w=240&h=160给定一个链接,例如有各种服务器端解决方案来调整图像大小。

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

我现在要退出编辑了!

玩得愉快!

尝试使用 ImageMagick for PHP。它允许您在服务器端调整图像大小和修改图像。这里有一些例子

在我的头顶上,这里有一个非常丑陋的完成方法:

创建一个接受所有请求的 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;

一些可能会绊倒这个问题的东西:

  • 如果条款和条件不允许缓存图像,他们可能不允许您使用服务器端代码访问他们的图像。
  • 如果您正在处理其他图像类型(gif,png),则必须调整一些代码

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

@ Taze 很好地服务器端,但他从另一台服务器获取图像,似乎您还没有阅读他在做什么以及他被允许做什么。

从理论上讲,您可以在自己的服务器上缓存它(您不允许的内容),使用 GDLIB 或 imagemagick 调整它的大小并将其提供给用户,然后从服务器中删除副本

但这违反了第三方的规则