【问题标题】:How to convert all images to JPG format in PHP?如何在 PHP 中将所有图像转换为 JPG 格式?
【发布时间】:2011-06-30 22:57:46
【问题描述】:

我正在用 PHP 开发一个网站,让用户上传图像,然后让他决定图像应该如何使用 jQuery - PHP 整数选择想要成为图片的区域,然后单击裁剪按钮裁剪并保存。

我面临的问题是并非所有图像类型都适合裁剪和保存,所以我注意到将图像转换为 JPG 然后让用户裁剪它的简单解决方案,因为它是一种简单的方法以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 格式,因为它最容易转换,没有任何问题。

【问题讨论】:

  • 裁剪有什么问题?如果没有必要,我不会将图像转换为 JPG(因为有损压缩)。
  • @Czechnology:我编辑了这个问题:),我希望你能理解我

标签: php image crop


【解决方案1】:

也许它不适用于 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");
}

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

【讨论】:

  • 为什么这个 sn-p 对 PNG 使用最大压缩(9,质量最差)而对 JPEG 使用最佳质量?这似乎是一个错字。
猜你喜欢
  • 1970-01-01
  • 2013-01-11
  • 2018-08-26
  • 2023-03-14
  • 2014-04-25
  • 2020-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多