Автоматически выравнивать и изменять размер 3 изображения в маленькое изображение с помощью PHP? - PullRequest
1 голос
/ 10 сентября 2009

Я не знаю, возможно ли это даже с помощью PHP, но я подумал, если это так, кто-то здесь знает, как это сделать. В настоящее время я работаю над проектом, в котором пользователи могут настроить основной аватар для всего тела, который будет использоваться по всему сайту. Существует множество различных изображений лица, волос и т. Д., Которые можно выбрать для создания своего аватара. У меня это отлично работает, но вот сложная часть. Я хочу иметь возможность использовать лицо, волосы и бороду (если мужчина) и автоматически создавать изображение 80x80, которое будет использоваться в качестве их небольшого аватара для сообщений на форуме и т. Д.

Есть несколько препятствий с этим. Во-первых, все изображения имеют размер 187x404 (большие объемы изображения являются прозрачными, изображение тела персонажа достигается путем наложения изображений, поэтому изображение лица на самом деле не такое большое). Чтобы это работало, изображения должны быть автоматически обрезаны, чтобы было удалено все лишнее пространство, а фактическое лицо, волосы или борода были показаны в месте 80x80.

Вторая проблема заключается в том, что некоторые волосы или бороды (при размещении на полноразмерном изображении лица) будут простираться за пределы 80х80 и отрубаться. Таким образом, изображение должно быть соединено в полном размере, а затем изменено в соответствии с размером 80x80.

Я знаю основной способ объединения трех изображений в одно ( Объединение 2-3 прозрачных изображений PNG друг на друга с помощью PHP ), но это все, что я получил. Если я сумасшедший и это невозможно, тогда скажи мне. Я, вероятно, слишком усложняю это, поэтому, если вы видите и, очевидно, более простой способ достижения этого, я бы с удовольствием это услышал.

Ответы [ 3 ]

2 голосов
/ 10 сентября 2009

Я думаю, вам нужно решить сначала, обрезка, изменение размера или комбинация обоих (обрезка до большего квадрата и изменение размера).

В любом случае, если у вас уже есть изображения, объединенные в одно, все три варианта легко сделать в php. Взгляните на imagecopyresampled () .

1 голос
/ 10 сентября 2009

Самый простой способ - просто поместить лицо / волосы / бороду в одну и ту же область изображения. Затем просто обрежьте эту область.

Если необходимо, вы можете сохранить дополнительные данные для каждого изображения, указав на изображении прямоугольник, который должен быть видимым в небольшом аватаре. Затем возьмите максимальные конечности этих прямоугольников на всех изображениях, которые вы составляете, и обрежьте их + уменьшите до своего небольшого размера аватара.

Однако имейте в виду, что изменение размера изображений PNG на несколько пикселей (например, 83x83 -> 80x80) может существенно снизить качество, особенно для изображений с большим количеством определенных краев. Это связано с тем, что в новом изображении много пикселей, которые [почти] равномерно разделены между 4 пикселями от исходного изображения, а в изображениях с острыми краями это приводит к размытию.

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

0 голосов
/ 10 сентября 2009

Возможно, я слишком упрощаю это, но вы можете попробовать:

  1. Следите за максимальными размерами граней перед композитированием.

  2. Вывести составное изображение во временный файл.

  3. Обрезать квадрат самых больших значений с шага 1

  4. Изменение размера обрезанного изображения до 80 x 80

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...