Imagemagick — Странные фрагменты вокруг текста в изображении

Я использую Imagemagick для динамической генерации OpenGraph Image.
Я обрабатываю это изображение шаг за шагом, значит:

  1. Изменить размер изображения до ширины 1200 пикселей
  2. Оттенки серого изображения
  3. Сделать изображение прозрачным
  4. Умножьте прозрачное изображение с помощью фильтра цвета

После создания фонового изображения я начинаю добавлять элементы.

  1. Добавление главной линии
  2. -> 8. Добавление некоторых других элементов

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

Есть идеи, как этого избежать?

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

Фрагменты вокруг текста
Фрагменты вокруг изображений

РЕДАКТИРОВАТЬ:
надеюсь, это поможет

Ссылка на изображение SRC

$imagename = uniqid() . ".jpg";
$image = $og_upload_path . '/' . $imagename;

$alpha = 15
$filterColor = "#08e2dd"; // Light Blue

// Asset images for processing the opengraph image
$white_background = $image_path . "/white.png";

$src_image = [Link to src image see above];

// Resize Image to 1200px width
system("convert '" . $src_image . "' -resize 1200 '" . $image . "'");

// Grayscale Image
system("convert '" . $image . "' -colorspace Gray '" . $image . "'");

// Make image transparent
system("composite -blend " . $alpha . " '" . $image . "' '" . $white_background . "' '" . $image . "'");

// Multiply Image with filter color
system("convert '" . $image . "' \ ". " \( -clone 0 -fill '" . $filterColor . "' -colorize 100 \) \ ". " -compose multiply \ ". " -composite '" . $image . "'");

// Add MainLine Text
system("convert '" . $image . "' -size 1000x -background transparent \ ". " -fill '" . $textColor_MainLine . "' \ ". " -pointsize " . $fontSize_MainLine . " \ ". " -font " . $path_fontfile . " \ ". " -gravity center caption:" . $text_MainLine . " \ ". " -gravity center -composite '" . $image . "'");

0

Решение

JPG — это формат изображений с потерями, а ImageMagick’s convert полезность не сохраняет высочайшее качество по умолчанию:

Для форматов изображений JPEG и MPEG качество составляет от 1 (низкое качество изображения и максимальное сжатие) до 100 (лучшее качество, но наименее эффективное сжатие). По умолчанию используется оценочное качество входного изображения, если оно может быть определено, в противном случае 92. Когда качество превышает 90, каналы цветности не подвергаются понижающей дискретизации. Используйте опцию -sampling-factor, чтобы указать факторы для снижения цветности.

Вы можете установить -quality 100 в ваших командах, но вам лучше будет управлять изображением в форматах без потерь, а затем конвертировать в формат с потерями (например, JPG) для меньшего размера файла.

1

Другие решения

Оставайтесь в PNG отформатировать как можно дольше и перейти только к JPG на самом последнем этапе. Также. составьте ваши звонки convert на как можно меньше, чтобы избежать распаковки и повторного сжатия. Таким образом, вы можете сделать свои первые 4 звонка convert в один шаг, как это:

convert https://s3.amazonaws.com/f.cl.ly/items/0E0V2M29313B3b0p1x2W/og_image.png \
-resize 1200                                                                  \
-colorspace gray                                                              \
-evaluate multiply 0.15 -evaluate add 55700                                   \
\( +clone -fill "#08e2dd" -colorize 100 \) -compose multiply -composite       \
output.png

Я переделал ваш composite команда смешать 85% белого с умножением на 0,15 и добавлением 85% из 65 535 (то есть 55700), что является белым в 16-битном квантовании. Это избавляет вас от необходимости держать white.png файл лежит без причины (так как мы знаем, что все пиксели будут 65535 в любом случае) и позволяет нам делать все с convert вместо того, чтобы сохранять и использовать composite и сохранить и вернуться к convert,

Я позволю вам проверить качество и время обработки и добавить в последний шаг самостоятельно.

1

Спасибо всем за ваши отличные и быстрые ответы.

В конце концов, сжатие Facebook действительно является проблемой. Если вы загружаете его вручную, оно становится размытым и очень неприятным, но если вы просто используете его как изображение OpenGraph, это здорово.
Ответы и комментарии мне очень помогли!

0
По вопросам рекламы [email protected]