Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

Будьте осторожны с тем, что вы хотите преобразовать. 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.

Ответ 2

Сделайте это для безопасного преобразования 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);

Ответ 3

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

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

Надеюсь, что поможет

Ответ 4

<?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");
    }
}
    ?>

Это очень хорошее миниатюра script =) Вот пример:

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

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

Ответ 5

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

НТН.

Ответ 8

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

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

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

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

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

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


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


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