Использовать PHP для преобразования PNG в JPG с сжатием?

У меня есть куча высококачественных файлов PNG. Я хочу использовать PHP для преобразования их в JPG из-за меньших размеров файлов при сохранении качества. Я хочу отображать файлы JPG в Интернете.

Есть ли у PHP функции / библиотеки для этого? Является ли качество / компрессия хорошей?

Будьте осторожны с тем, что вы хотите преобразовать. JPG не поддерживает альфа-прозрачность, а PNG. Вы потеряете эту информацию.

Для преобразования вы можете использовать следующую функцию:

// Quality is a number between 0 (best compression) and 100 (best quality) function png2jpg($originalFile, $outputFile, $quality) { $image = imagecreatefrompng($originalFile); imagejpeg($image, $outputFile, $quality); imagedestroy($image); } 

Эта функция использует функции imagecreatefrompng() и imagejpeg() из библиотеки GD.

Сделайте это для безопасного преобразования PNG в JPG с прозрачностью в белом цвете.

 $image = imagecreatefrompng($filePath); $bg = imagecreatetruecolor(imagesx($image), imagesy($image)); imagefill($bg, 0, 0, imagecolorallocate($bg, 255, 255, 255)); imagealphablending($bg, TRUE); imagecopy($bg, $image, 0, 0, 0, 0, imagesx($image), imagesy($image)); imagedestroy($image); $quality = 50; // 0 = worst / smaller file, 100 = better / bigger file imagejpeg($bg, $filePath . ".jpg", $quality); imagedestroy($bg); 

Это небольшой пример, который преобразует «image.png» в «image.jpg» при 70% качестве изображения:

 <?php $image = imagecreatefrompng('image.png'); imagejpeg($image, 'image.jpg', 70); imagedestroy($image); ?> 

надеюсь, это поможет

 <?php function createThumbnail($imageDirectory, $imageName, $thumbDirectory, $thumbWidth) { $explode = explode(".", $imageName); $filetype = $explode[1]; if ($filetype == 'jpg') { $srcImg = imagecreatefromjpeg("$imageDirectory/$imageName"); } else if ($filetype == 'jpeg') { $srcImg = imagecreatefromjpeg("$imageDirectory/$imageName"); } else if ($filetype == 'png') { $srcImg = imagecreatefrompng("$imageDirectory/$imageName"); } else if ($filetype == 'gif') { $srcImg = imagecreatefromgif("$imageDirectory/$imageName"); } $origWidth = imagesx($srcImg); $origHeight = imagesy($srcImg); $ratio = $origWidth / $thumbWidth; $thumbHeight = $origHeight / $ratio; $thumbImg = imagecreatetruecolor($thumbWidth, $thumbHeight); imagecopyresized($thumbImg, $srcImg, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $origWidth, $origHeight); if ($filetype == 'jpg') { imagejpeg($thumbImg, "$thumbDirectory/$imageName"); } else if ($filetype == 'jpeg') { imagejpeg($thumbImg, "$thumbDirectory/$imageName"); } else if ($filetype == 'png') { imagepng($thumbImg, "$thumbDirectory/$imageName"); } else if ($filetype == 'gif') { imagegif($thumbImg, "$thumbDirectory/$imageName"); } } ?> 

Это очень хороший скрипт thumbnail =) Вот пример:

$ path = Путь к папке, в которой находится исходное изображение. $ name = Имя файла, в котором вы хотите сделать эскиз. $ thumbpath = путь к каталогу, в котором вы хотите сохранить миниатюру. $ maxwidth = максимальная ширина миниатюры в PX, например. 100 (который будет составлять 100 пикселей).

createThumbnail($path, $name, $thumbpath, $maxwidth);

Возможно, вы захотите изучить Image Magick , обычно считающуюся стандартной библиотекой для обработки изображений. Требуется установить еще один php-модуль, но не уверен, что он доступен или доступен для установки по умолчанию.

НТН.

PHP имеет некоторые функции обработки изображений вместе с функцией imagecreatefrompng и imagejpeg . Первый будет создавать внутреннее представление файла изображения PNG, а второй – для сохранения этого представления в виде файла изображения JPEG.

См. Этот список библиотек изображений php . В основном это GD или Imagemagick.

Я знаю, что это не точный ответ OP, но поскольку ответы уже даны …

Вам действительно нужно сделать это на PHP?
Я имею в виду: если вам нужно преобразовать много изображений, выполнение этого в PHP может быть не лучшим образом: вы memory_limit с memory_limit , max_execution_time , …

Я также хотел бы сказать, что GD может не дать вам лучшее соотношение качества и размера; но не уверен в этом (если вы проводите сравнение между GD и другими решениями, меня очень интересуют результаты ;-))

Другим подходом, не использующим PHP, было бы использовать Image Magick через командную строку (а не как расширение PHP, как это предполагали другие люди)

Вам придется написать shell-скрипт, который проходит через все .png файлы и дает их либо

  • convert для создания нового файла .jpg для каждого файла .png
  • или mogrify чтобы непосредственно работать с исходным файлом и переопределять его.

В качестве побочного элемента: если вы делаете это прямо на своем производственном сервере, вы можете добавить некоторое время сна между пучками конверсий, чтобы немного остыть иногда ^^

Я использую shell-скрипт + convert / mogrify несколько раз ( mogrify их запускать что-то вроде 10 часов один раз) , и они действительно хорошо выполняют работу 🙂