真的绞尽脑汁,我已经研究了2天以上了。
目标是什么?单击/选择带图像的子目录;在提交时,批处理将在选择的整个DIR上使用GD运行,在同一服务器上的/ thumb文件夹中创建拇指。
状态?我可以一次为一个文件执行此操作,需要一次执行多个文件。
这是我的一次性代码:
$filename = "images/r13.jpg";
list($width,$height) = getimagesize($filename);
$width_ratio = 166 / $width;
if ($height * $width_ratio <= 103)
{
$adjusted_width = 166;
$adjusted_height = $height * $width_ratio;
}
else
{
$height_ratio = 103 / $height;
$adjusted_width = $width * $height_ratio;
$adjusted_height = 103;
}
$image_p = imagecreatetruecolor(166,103);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p,$image,ceil((166 - $adjusted_width) / 2),ceil((103 - $adjusted_height) / 2),0,0,ceil($adjusted_width),ceil($adjusted_height),$width,$height);
imagejpeg($image_p,"images/thumbs/r13.jpg",70);
正如您所看到的,脚本是针对单个文件的,我想迭代目录而不是指定名称。
(我也会研究imagemagick,但目前它不是一个选项。)
我将继续经历SO等,但任何帮助都将是巨大的。
感谢。
答案 0 :(得分:4)
你需要从这段代码中创建一个函数:
function processImage($filename){
list($width,$height) = getimagesize($filename);
$width_ratio = 166 / $width;
if ($height * $width_ratio <= 103)
{
$adjusted_width = 166;
$adjusted_height = $height * $width_ratio;
}
else
{
$height_ratio = 103 / $height;
$adjusted_width = $width * $height_ratio;
$adjusted_height = 103;
}
$image_p = imagecreatetruecolor(166,103);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p,$image,ceil((166 - $adjusted_width) / 2),ceil((103 - $adjusted_height) / 2),0,0,ceil($adjusted_width),ceil($adjusted_height),$width,$height);
imagejpeg($image_p,"images/thumbs/".basename($filename),70);
imagedestroy($image_p);
}
请注意这个函数的最后两行:它根据传递的fiulename编写thumb并销毁资源,释放内存。
现在将此应用于目录中的所有文件:
foreach(glob('images/*.jpg') AS $filename){
processImage($filename);
}
基本上就是这样。