Масштабировать изображение в соответствии с максимальным размером файла

Я использую Imagick и мне нравится масштабировать изображение до максимального размера файла 2,5 МБ

Я посмотрел на этот вопрос SOF: ImageMagick: масштабировать изображение JPEG с максимальным размером файла, что именно то, что я хочу сделать, но extent() Метод из Imagick не имеет параметра размера: http://www.php.net/manual/en/imagick.extentimage.php

Кто-нибудь знает, как я мог к этому? В данный момент я пытаюсь вычислить коэффициент между исходным размером файла и целевым размером файла, чтобы вычислить новое разрешение, но обнаружил, что разрешение не пропорционально размеру файла.

Обновить - выходной формат всегда JPEG, поэтому, если есть способ рассчитать размер, прежде чем сохранить его, было бы здорово

Заранее спасибо, Максим

1 ответ

Решение

Функция экстента, которую вы вызываете, просто устанавливает размер изображения.

Функция для установки параметра экстента jpeg:

$imagick->setOption('jpeg:extent', '2500kb');

Интересно, что функция $imagick->getImageBlob(), кажется, падает после установки этой опции. Вы вынуждены записать файл на диск, вместо того, чтобы получать его байты напрямую.

Выходным форматом всегда является JPEG, поэтому, если есть способ рассчитать размер, прежде чем сохранить его, было бы здорово

Нет Степень детализации каждого изображения определяет размер изображения после сжатия для данного качества изображения. Поэтому невозможно рассчитать уровень качества, который даст окончательный размер.

Код C из базовой библиотеки Image Magick, который ограничивает размер файла:

maximum=101;
for (minimum=2; minimum < maximum; )
{
    jpeg_image->quality=minimum+(maximum-minimum+1)/2;
    status=WriteJPEGImage(jpeg_info,jpeg_image);
    if (GetBlobSize(jpeg_image) <= extent)
      minimum=jpeg_image->quality+1;
    else
      maximum=jpeg_image->quality-1;
    }
}

Т.е. он просто сжимает файл с разными уровнями качества изображения, пока не найдет уровень, который дает приемлемый размер файла для данного значения.

Другие вопросы по тегам