用PHP调整图片大小的问题

时间:2011-05-17 18:45:26

标签: php

我使用下面的功能重新调整图片大小。但我今天尝试了它并且它一直给我一个错误信息,说明图片的名称和路径不是有效的资源,虽然名称和路径是非常正确的。这是功能:

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来自数据库,问题不在于它。 我一直在使用这种方式的功能,它可以工作,但不是这次,也许我应该尝试一个更好的?

感谢您的任何建议。

2 个答案:

答案 0 :(得分:1)

我强烈建议您使用getimagesize()函数,您可以从中$old_x(或更恰当地$old_w)和$old_y$old_h? )最重要的是IMAGETYPE_XXX常数,表示图像类型。这将排除代码中2个可能的问题原因:

  1. 如果文件类型的大小写不同,您的检测将失败(例如PNGJpG
  2. 如alexn所述,如果文件名包含更多的点,则您的脚本将占用名称的错误部分。
  3. 如果你喜欢坚持自己的方式,至少可以做到

    $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

  

转换调整大小