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

Можно также сделать это

[Flags]
public enum MyEnum
{
    None   = 0,
    First  = 1 << 0,
    Second = 1 << 1,
    Third  = 1 << 2,
    Fourth = 1 << 3
}

, я нахожу смещение бита легче, чем ввод 4,8,16,32 и так далее. Это не оказывает влияния на Ваш код, потому что это все сделано во время компиляции

49
задан John 29 July 2009 в 06:20
поделиться

7 ответов

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

58
ответ дан 7 November 2019 в 11:09
поделиться

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

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

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

11
ответ дан 7 November 2019 в 11:09
поделиться

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

HTH.

4
ответ дан 7 November 2019 в 11:09
поделиться

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

3
ответ дан 7 November 2019 в 11:09
поделиться

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

2
ответ дан 7 November 2019 в 11:09
поделиться

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

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

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

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

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

  • convert , чтобы создать новый файл .jpg для каждого .
2
ответ дан 7 November 2019 в 11:09
поделиться
<?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 (что будет 100 пикселей).

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

10
ответ дан 7 November 2019 в 11:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: