簡體   English   中英

PHP Imagick 轉換 SVG 沒有抗鋸齒

[英]PHP Imagick converting SVG without antialiasing

我正在嘗試編寫 PHP function 來轉換沒有任何抗鋸齒的 SVG 圖像(以便最終的 SVG 中指定的顏色是塊狀的並且只包含顏色)。

等效的命令行是:

convert +antialias /path/to.svg /path/to.png

我假設我需要使用 PHP 的Imagick::setOption方法來傳遞“+antialias”,但是文檔非常稀疏。

以下代碼段將寫入 PNG 文件,但沒有任何選項可以防止呈現抗鋸齒像素:

$image = new Imagick();

// None of these have any affect - output image is always antialiased.
$image->setOption('+antialias', true);
$image->setOption('-antialias', true);
$image->setOption('+antialias', 'true');
$image->setOption('-antialias', 'true');
$image->setOption('antialias', true);
$image->setOption('antialias', false);
$image->setOption('antialias', 'true');
$image->setOption('antialias', 'false');

$image->readImage('/path/to.svg');
$image->writeImage('/path/to.png');

任何幫助都會很棒,謝謝。

這不是抗鋸齒矢量文件(例如 SVG)的好方法。 命令行中的正確方法是在讀取文件之前設置所需的密度,然后在使用大密度時重新調整大小以補償大放大倍率。 所以例如

convert -density 288 image.svg -resize 25% image.png

標稱密度(默認)為 72。所以 288 = 72*4。 因此,除非您想要更大的 output,否則我們之后會調整大小 1/4 = 25%。 然后按更大的值調整大小。

在 PHP Imagick 中,您可以創建一個新的 Imagick() 實例。 然后設置所需的濃度。 然后讀取輸入 SVG。 然后調整大小。 然后設置PNG格式並保存到磁盤。 請參閱 setImageResolution 以在 Imagick 中設置密度。 https://www.php.net/manual/en/imagick.setimageresolution.php

不幸的是,我不認為你想要的是可能的。 ImageMagick 使用 Inkscape 渲染 SVG,而 Inkscape 沒有禁用抗鋸齒的命令行選項。

https://graphicdesign.stackexchange.com/questions/138075/export-svg-without-anti-aliasing-in-inkscape-1-0-by-command-line

您可以以高分辨率渲染,然后進行最近鄰下采樣。 它會減少可見的抗鋸齒,但您仍然會得到一些 SVG 文件中沒有的顏色。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM