我计划在我的网站中生成RSS源...为了在RSS源中显示图像,我从源系统(不同于服务器)中获取它们。这只是为了减少我服务器中的负载和带宽使用。
需要在运行时/飞行中调整图像大小,因为图像大小非常大。
请指导如何实现这一目标
答案 0 :(得分:2)
- 这是我暂时使用的功能,它旨在自动维护调整大小后的图像的约束比例
<强> USAGE 强>
imageResize('old_image.jpg', 200, 'new_image.jpg');
function imageResize($image, $thumb_width, $new_filename)
{
$max_width = $thumb_width;
//Check if GD extension is loaded
if (!extension_loaded('gd') && !extension_loaded('gd2')) {
trigger_error("GD is not loaded", E_USER_WARNING);
return false;
}
//Get Image size info
list($width_orig, $height_orig, $image_type) = getimagesize($image);
switch ($image_type) {
case 1:
$im = imagecreatefromgif($image);
break;
case 2:
$im = imagecreatefromjpeg($image);
break;
case 3:
$im = imagecreatefrompng($image);
break;
default:
trigger_error('Unsupported filetype!', E_USER_WARNING);
break;
}
//calculate the aspect ratio
$aspect_ratio = (float) $height_orig / $width_orig;
//calulate the thumbnail width based on the height
$thumb_height = round($thumb_width * $aspect_ratio);
while ($thumb_height > $max_width) {
$thumb_width -= 10;
$thumb_height = round($thumb_width * $aspect_ratio);
}
$new_image = imagecreatetruecolor($thumb_width, $thumb_height);
//Check if this image is PNG or GIF, then set if Transparent
if (($image_type == 1) OR ($image_type == 3)) {
imagealphablending($new_image, false);
imagesavealpha($new_image, true);
$transparent = imagecolorallocatealpha($new_image, 255, 255, 255, 127);
imagefilledrectangle($new_image, 0, 0, $thumb_width, $thumb_height, $transparent);
}
imagecopyresampled($new_image, $im, 0, 0, 0, 0, $thumb_width, $thumb_height, $width_orig, $height_orig);
//Generate the file, and rename it to $new_filename
switch ($image_type) {
case 1:
imagegif($new_image, $new_filename);
break;
case 2:
imagejpeg($new_image, $new_filename);
break;
case 3:
imagepng($new_image, $new_filename);
break;
default:
trigger_error('Failed resize image!', E_USER_WARNING);
break;
}
return $new_filename;
}
答案 1 :(得分:2)
答案很简单:
不要动态调整图片大小。永远不要那样做。
与着名的回声与打印或单引号与双引号问题不同,调整图像大小会对系统性能产生真实和严重的影响。因此,您最终会出现故障RSS提要并暂停服务器
答案 2 :(得分:1)
请注意,您不应该动态制作带有缩略图像的RSS源。而是将生成的源(带图像)保存在.rss文件中并提供服务。
现在,当您添加新项目时,您将更新.rss文件。
答案 3 :(得分:1)
我用这个:
<Directory {DOCUMENT_ROOT}/tn/>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule \.png$ /tn/create.php [PT,NE,L]
</Directory>
在nginx背后很有效。
在编写“create.php”之前,要非常小心以确保您了解PHP。创建一个巨大的安全漏洞很容易。
注意:如果您有大量无法轻易生成的图像,此解决方案是值得的。