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

StackOverflow https://stackoverflow.com/questions/1201798

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

Сделайте это, чтобы безопасно преобразовать 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);

Другие советы

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

Это небольшой пример, который преобразует '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");
    }
}
    ?>

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

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

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

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

ХТХ.

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

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

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

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

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

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

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

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


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


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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top