#imagemagick
#imagemagick
Вопрос:
При преобразовании SVG-файла в PNG с помощью ImageMagick (я использую 6.3.7) кажется, что строка пикселей справа и внизу теряется при преобразовании.
Например, рассмотрим этот простой SVG, который представляет алмаз, идеально вписывающийся в геометрию SVG 60×60. При преобразовании в SVG с
convert diamond.svg diamond.png
он генерирует этот PNG (также размером 60×60 пикселей). Углы ромба в крайнем правом и нижнем углу были срезаны в формате PNG. Кроме того, ромб кажется немного увеличенным на 1 пиксель.
Может кто-нибудь подтвердить это поведение, возможно, предоставить какое-то обоснование и, возможно, предоставить исправление?
Комментарии:
1. Вы когда-нибудь проверяли мой ответ?
Ответ №1:
«Может ли кто-нибудь подтвердить это поведение, возможно, предоставить какое-то обоснование и, возможно, предоставить исправление?»
-
SVG — это векторный формат и, как таковой, не знает пикселей (ну, если вы не вставляете пиксельные изображения в SVG …).
-
Размеры ваших путей SVG, однако, определяются в пикселях. Вот почему его размер задан как 60×60.
-
Когда вы визуализируете SVG (отображаете его в Inkscape или любом средстве просмотра SVG), вы можете незаметно масштабировать изображение, и вы никогда не обнаружите пикселизации (если только вы не используете лупу, чтобы увидеть пиксели экрана вашего монитора).
-
Однако PNG не является векторным форматом, это формат растрового изображения, состоящий из пикселей. Для рисования диагональных черных краев необходимо использовать черные пиксели в «лестничной клетке» (возможно, сглаженные путем добавления нескольких пикселей в оттенках серого между ними для достижения эффекта сглаживания).
-
Когда вы просите ImageMagick преобразовать ваш алмаз в формат PNG размером 60×60 пикселей, у него есть только сетка 60×60 для создания диагоналей.
-
Теперь посчитайте: как вы можете поместить «совершенную» пиксельную лестницу, которая поднимается с высоты 1 пикселя до высоты 30 пикселей (это 31-й шаг, вы его посчитали?) и обратно до высоты 1 пикселя (это будет 61-й шаг, вы его посчитали?)) в такую сетку ?!? — Вы не можете!
-
Единственное возможное «исправление» для сохранения идеальной формы (без «срезания» эффектов, как вы заметили) — это масштабирование PNG до размера 61×61 (или 122×122):
convert diamond.svg -resize 61x61 antialias diamond.png rsvg-convert -w 61 -h 61 -o diamond-rsvg.png diamond.svg
-
Преобразование векторной графики в пиксельную графику всегда что-то «потеряет» и всегда потребует от вас принятия какого-либо компромисса!