如何在PHP中将所有图像转换为JPG格式?

4
我正在开发一个PHP网站,让用户上传图片并使用jQuery-PHP集成来选择所需的图片区域,然后点击裁剪按钮进行裁剪并保存。
我面临的问题是,并非所有图像类型都适合裁剪和保存,因此我注意到将图像转换为JPG格式并允许用户裁剪它是解决问题的简单方法。
我该如何做?
这是图像类型问题的最佳解决方案吗?
编辑:
我正在使用此代码来裁剪图像,在PNG格式中无法正常工作,并且仅限于3个扩展名。
$path_parts = pathinfo("../images/DVDs/".$_POST['logo_file']);
        if ($path_parts['extension'] == "png") {

                $src = imagecreatefrompng("../images/DVDs/".$_POST['logo_file']);

                        $tmp = imagecreatetruecolor(350, 494);
                        imagecopyresampled($tmp, $src, 0,0,$_POST['x'],$_POST['y'],350,494,$_POST['w'],$_POST['h']);
                        imagepng($tmp, "../images/DVDs/$filename".'t_'.$_POST['logo_file'],100);
            } else if ($path_parts['extension'] == "jpg" || $path_parts['extension'] == "jpeg") {

                        $src = imagecreatefromjpeg("../images/DVDs/".$_POST['logo_file']);

                        $tmp = imagecreatetruecolor(350, 494);
                        imagecopyresampled($tmp, $src, 0,0,$_POST['x'],$_POST['y'],350,494,$_POST['w'],$_POST['h']);
                        imagejpeg($tmp, "../images/DVDs/$filename".'t_'.$_POST['logo_file'],100);
                } else if ($path_parts['extension'] == "gif") {

                        $src = imagecreatefromgif("../images/DVDs/".$_POST['logo_file']);

                        $tmp = imagecreatetruecolor(350, 494);
                        imagecopyresampled($tmp, $src, 0,0,$_POST['x'],$_POST['y'],350,494,$_POST['w'],$_POST['h']);
                        imagegif($tmp, "../images/DVDs/$filename".'t_'.$_POST['logo_file'],100);
                    }

我希望将图片转换为JPG格式,因为这是最容易转换而不会出现任何问题的格式。


1
你对裁剪有什么问题吗?如果没有必要的话,我不会将图像转换为JPG格式(因为它是有损压缩的)。 - Czechnology
@Czechnology:我编辑了问题:),希望现在你能理解我。 - Saleh
1个回答

9
也许PNG格式无法正常工作,因为PNG只支持0到9级别的压缩。我更愿意根据MIME类型而不是扩展名来修改行为。我猜您在使用代码之前会检查POST用户输入;) 这是我的代码变体:
$path = "../images/DVDs/";

$img = $path . $_POST['logo_file'];

if (($img_info = getimagesize($img)) === FALSE)
  die("Image not found or not an image");


switch ($img_info[2]) {
  case IMAGETYPE_GIF  : $src = imagecreatefromgif($img);  break;
  case IMAGETYPE_JPEG : $src = imagecreatefromjpeg($img); break;
  case IMAGETYPE_PNG  : $src = imagecreatefrompng($img);  break;
  default : die("Unknown filetype");
}

$tmp = imagecreatetruecolor(350, 494);
imagecopyresampled($tmp, $src, 0, 0, intval($_POST['x']), intval($_POST['y']),
                   350, 494, intval($_POST['w']), intval($_POST['h']));


$thumb = $path . pathinfo($img, PATHINFO_FILENAME) . "_thumb";
switch ($img_info[2]) {
  case IMAGETYPE_GIF  : imagegif($tmp,  $thumb . '.gif');      break;
  case IMAGETYPE_JPEG : imagejpeg($tmp, $thumb . '.jpg', 100); break;
  case IMAGETYPE_PNG  : imagepng($tmp,  $thumb . '.png', 9);   break;
  default : die("Unknown filetype");
}

对于您想要支持的每种文件类型,您只需添加两行代码。

为什么这段代码片段使用 PNG 的最大压缩率(9,最差的质量),而对于 JPEG 使用最佳质量?这似乎是一个笔误。 - staabm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接