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