我使用下面的功能重新调整图片大小。但我今天尝试了它并且它一直给我一个错误信息,说明图片的名称和路径不是有效的资源,虽然名称和路径是非常正确的。这是功能:
function createthumb($name, $filename, $new_w, $new_h) {
$system = explode(".", $name);
if (preg_match("/jpeg|jpg|JPG/", $system[1])) {
$src_img = imagecreatefromjpeg($name);
}
if (preg_match("/png/", $system[1])) {
$src_img = imagecreatefrompng($name);
}
$old_x = imageSX($src_img);
$old_y = imageSY($src_img);
if ($old_x > $old_y) {
$thumb_w = $new_w;
$thumb_h = $old_y * ($new_h / $old_x);
}
if ($old_x < $old_y) {
$thumb_w = $old_x * ($new_w / $old_y);
$thumb_h = $new_h;
}
if ($old_x == $old_y) {
$thumb_w = $new_w;
$thumb_h = $new_h;
}
$dst_img = ImageCreateTrueColor($thumb_w, $thumb_h);
imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $thumb_w, $thumb_h, $old_x, $old_y);
if (preg_match("/png/", $system[1])) {
imagepng($dst_img, $filename);
} else {
imagejpeg($dst_img, $filename);
}
imagedestroy($dst_img);
imagedestroy($src_img);
}
我用这种方式
$path = "photos/".$row->pic_name;
createthumb($path, $path, 350, 180);
我希望它能够调整图片大小并覆盖原始图片(来源)。
$row->pic_name
来自数据库,问题不在于它。
我一直在使用这种方式的功能,它可以工作,但不是这次,也许我应该尝试一个更好的?
感谢您的任何建议。
答案 0 :(得分:1)
我强烈建议您使用getimagesize()
函数,您可以从中$old_x
(或更恰当地$old_w
)和$old_y
($old_h
? )最重要的是IMAGETYPE_XXX
常数,表示图像类型。这将排除代码中2个可能的问题原因:
PNG
或JpG
)如果你喜欢坚持自己的方式,至少可以做到
$type = strtolower(array_pop($system));
if ($type == 'jpg' || $type == 'jpeg') {
$src_img = imagecreatefromjpeg($name);
} elseif ($type == 'png') {
$src_img = imagecreatefrompng($name);
}
像/png/
这样的RegExps在这里是一种过度杀手 - strpos(...) !== false
会做同样但更快的事。您不需要正则表达式来进行简单的子字符串搜索。
最后,不会用拇指覆盖图像会导致任何问题吗?
答案 1 :(得分:0)
我知道一个简单的方法。它是ImageMagic
转换调整大小