Как конвертировать все изображения в формат JPG в PHP? - PullRequest
4 голосов
/ 21 февраля 2011

Я занимаюсь разработкой веб-сайта на PHP, который позволяет пользователю загружать изображения, а затем позволяет ему решать, как должно быть изображение, используя jQuery - PHP integeration, чтобы выбрать область, которая должна быть изображением, и затем нажмите кнопку кадрирования, чтобыобрежьте его и сохраните.

Проблема, с которой я сталкиваюсь, заключается в том, что не все типы изображений подходят для обрезки и сохранения, поэтому я заметил, что это простое решение для преобразования изображения в 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, потому что это самый простойконвертировать без проблем.

1 Ответ

9 голосов
/ 21 февраля 2011

Возможно, он не работает с 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");
}

Для каждого типа файла, который вы хотите поддерживать, вам нужно всего лишь добавить две строки кода.

...