Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否在加载其他网站的外部图像之前调整其大小?_Php_Javascript_Jquery_Ajax - Fatal编程技术网

Php 是否在加载其他网站的外部图像之前调整其大小?

Php 是否在加载其他网站的外部图像之前调整其大小?,php,javascript,jquery,ajax,Php,Javascript,Jquery,Ajax,我正在从事一个项目,该项目涉及从各种网站获取图像,并显示原始图像的Thumnail或调整大小的版本。 由于我将一次获取许多图像,这需要更多的时间,因为原始图像文件将被加载。 我需要的是一个图像url,我需要该图像文件的大小调整版本?这样我就不需要下载大的原始图像文件… 例如:原始图像:500X800一些500kb 我需要的是:100X150一些100kb的图像文件.. 可以使用Jquery吗?还是PHP? 它们在Jquery或任何插件中都有像imagecopyresampled(PHP)这样

我正在从事一个项目,该项目涉及从各种网站获取图像,并显示原始图像的Thumnail或调整大小的版本。
由于我将一次获取许多图像,这需要更多的时间,因为原始图像文件将被加载。
我需要的是一个图像url,我需要该图像文件的大小调整版本?这样我就不需要下载大的原始图像文件…
例如:
原始图像:500X800一些500kb
我需要的是:100X150一些100kb的图像文件..

可以使用Jquery吗?还是PHP?
它们在Jquery或任何插件中都有像imagecopyresampled(PHP)这样的函数吗?

好的,需要在某一点下载大文件来创建缩略图

通过JQuery,您可以向服务器请求缩略图,服务器下载文件,创建缩略图,并在调整大小后将缩略图的URL发送回客户端。这样,当缩略图准备好时,客户端将逐渐收到缩略图

Edit经过一点实验后,我发现只要
img
请求图片,即使动态删除其
src
属性,下载也会继续

因此,我决定编写一个示例代码(没有太多验证,它只适用于jpeg,但是添加其他类型的代码将非常容易)。该解决方案分为3个部分:

HTML

首先,我使用了一个空的
div
和一些特定的属性来让
jQuery
加载什么。我要向努里亚·奥利弗道歉,她有我在网上能找到的第一张“大图”。下面是一个示例
div

<div class="thumbnail" data-source="http://www.nuriaoliver.com/pics/nuria1.jpg" data-thumbnail-width="100" data-thumbnail-height= "200"/></div>
PHP

PHP
方面,我做了一个快速测试,看看图片是否已经被缓存(我只使用了文件名,这应该更复杂,但只是给你一个例子),否则我下载图片,调整大小,存储在
缩略图
文件夹中,并返回
jQuery
的路径:

<?php

$url = $_GET["src"];
$width = $_GET["width"];
$height = $_GET["height"];

$filename = "thumbnail/" . basename($url);
if(is_file($filename)) // File is already cached
{
    echo $filename;
    exit;
}

// for now only assume JPG, but checking the extention should be easy to support other types
file_put_contents($filename, file_get_contents($url)); // download large picture
list($originalWidth, $originalHeight) = getimagesize($filename);
$original = imagecreatefromjpeg($filename); // load original file
$thumbnail = imagecreatetruecolor($width, $height); // create thumbnail
imagecopyresized($thumbnail, $original, 0, 0, 0, 0, $width, $height, $originalWidth, $originalHeight); // copy the thumbnail
imagedestroy($original);
imagejpeg($thumbnail, $filename); // overwrite existing file
imagedestroy($thumbnail);
echo $filename;

要实现这一点,您需要进行一些实际的图像处理,而这是使用js无法做到的,因此需要一些服务器端语言。PHP是一个选项

如果您对混淆图像源不感兴趣,您可以很好地依赖一个外部工具,例如它需要一个

如果您最终不依赖于全局CDN,那么至少要理清适当的缓存。您最不想做的事情是为后续相同的请求反复调整同一图像的大小-图像较小的任何好处都可能会被处理时间所抵消。

是一个很好的插件,它对我来说很有用,并且易于操作。
最好的部分是有许多选项可供选择,例如输出文件的质量、potrait图像的最大宽度、风景图像的最大宽度等等 我们可以设置权限,如阻止服务器请求阻止域缩略图。。等


注意:这实际上是有人发布的,作为对这个问题的回答。但是它被删除了。所以我重新发布了它,因为它很有用。

你必须使用PHP。JQuery无法更改映像的实际文件大小。您要求主机服务器调整其大小,因此不,除非您对服务器具有权限,否则这是不可能的。除非主机服务器提供这样的调整大小选项,否则如果您使用PHP,您将始终将图像下载到服务器;如果您不拥有远程服务器,则在调整图像大小之前,如果您使用JS,您将始终将图像下载到客户端计算机?有什么需要更多解释的吗?无论是哪种方式,你都必须下载图像,这可能是使用脚本完成的最好方式,但是,如果你要这样做,为什么不直接使用CSS并在
标记中定义大小呢。这样,它在下载图像时仍能保持图像的位置。
<?php

$url = $_GET["src"];
$width = $_GET["width"];
$height = $_GET["height"];

$filename = "thumbnail/" . basename($url);
if(is_file($filename)) // File is already cached
{
    echo $filename;
    exit;
}

// for now only assume JPG, but checking the extention should be easy to support other types
file_put_contents($filename, file_get_contents($url)); // download large picture
list($originalWidth, $originalHeight) = getimagesize($filename);
$original = imagecreatefromjpeg($filename); // load original file
$thumbnail = imagecreatetruecolor($width, $height); // create thumbnail
imagecopyresized($thumbnail, $original, 0, 0, 0, 0, $width, $height, $originalWidth, $originalHeight); // copy the thumbnail
imagedestroy($original);
imagejpeg($thumbnail, $filename); // overwrite existing file
imagedestroy($thumbnail);
echo $filename;