2011-11-19 51 views
0

我想调整服务器端的图像大小,以使缩略图具有动态性。 我使用这个代码:用PHP调整服务器端的Jpeg的大小

<?php 
Header("Content-type: image/jpeg"); 
$img_src = $_GET['photo']; 

$size = getimagesize($img_src); 

$src_w = $size[0]; 
$src_h = $size[1]; 

$dst_w = 80; 
$dst_h = 80; 

$test_h = round(($dst_w/$src_w) * $src_h); 
$test_w = round(($dst_h/$src_h) * $src_w); 


if($src_w > $src_h) { 
    $x = $test_w; 
    $y = $dst_h; 
} elseif($src_h > $src_w) { 
    $x = $dst_w; 
    $y = $test_h; 
} 

$img_new = imagecreatefromjpeg($img_src); 
$img_mini = imagecreatetruecolor($x, $y); 
imagecopyresampled($img_mini,$img_new,0,0,0,0,$x,$y,$src_w,$src_h); 
imagejpeg($img_mini); 
?> 

但它没有工作,我找不到原因。没有错误,没有任何出现。 任何人都可以帮助我吗?

谢谢;

+1

*什么*不起作用? – bos

+0

对不起,我编辑了这篇文章。 –

+0

什么是$ _GET ['photo'] ...它是一个网址吗? –

回答

2

如果你得到一个空白页面,那么无论你的脚本超时或php内存限制已被超过。在启动任何gd函数之前,使用ini_set函数来设置memory_limitmax_execution_time

图像处理需要时间以及内存。所以这些配置很重要。

+0

它解决了问题;谢谢你的帮助。 –

0

检查这一行:

$size = getimagesize($img_src); 

你上哪儿去定义$img_src?我看不到它!

编辑 使用此代码将文件写入到磁盘,然后重定向到书面文件:

<?php 

$chemin = $_GET['photo']; 

$size = getimagesize($chemin); 


$src_w = $size[0]; 
$src_h = $size[1]; 

$dst_w = 80; 
$dst_h = 80; 

$test_h = round(($dst_w/$src_w) * $src_h); 
$test_w = round(($dst_h/$src_h) * $src_w); 


if($src_w > $src_h) { 
    $x = $test_w; 
    $y = $dst_h; 
} elseif($src_h > $src_w) { 
    $x = $dst_w; 
    $y = $test_h; 
} 

$img_new = imagecreatefromjpeg($chemin); 
$img_mini = imagecreatetruecolor($x, $y); 

imagecopyresampled($img_mini, $img_new, 0, 0, 0, 0, $x ,$y, $src_w, $src_h); 

$name=rand() * rand() . '.jpg'; 

imagejpeg($img_mini, $name); 
header("Location: $name"); 

?> 
+0

这是一个复制/粘贴错误,我编辑我的第一篇文章来纠正它。抱歉。 –

+0

现在没有'$ chemin'的人... 无论如何,这是一个正常工作的脚本,如果你输出到一个文件而不是浏览器 –

+0

似乎是一些歪曲的字节,当他们通过HTTP传递,因为它的工作原理完全在输出到文件系统时。我已经编辑了答案,查看了它 –

0

如果您没有收到错误信息,我会使用您知道的测试图像,并逐行处理,确认您已得到您期望的结果,不加思索地找到该行(s)这是造成问题。检查这些函数的预期返回结果,并制定条件,输出代码卡住的位置或未获得所需结果的位置。

例子:

if (isset($img_src)) { 
    echo "No image parameter set in the URL"; 
    return; 
} 
0

你可能需要翻译,你正在进入一个实际的文件路径的URL,这样就可以打开该文件。我期望你使用的函数需要一个文件路径,而不是一个url。否则,他们应该另外做2个额外的请求,以避免下载一个图像并通过客户端上的CSS调整大小。

无论如何,如果您要调整缩略图的大小,您应该将缩略图缓存到thumbs(或其他)子目录中。然后在每次请求时,检查缩略图是否存在,如果存在,直接提供,然后创建缩略图。或者,如果文件未被动态上传,请预先创建缩略图,并直接从thumbs目录中引用它们。