web-dev-qa-db-ja.com

ImageMagickpngからsvg画像サイズ

次のコマンドを使用して、PNGをSVGに正常に変換しました。

convert Slide3.png Slide3_converted.svg

問題は、結果のファイルがなんと380MBになることです。

このバージョンのコマンドを試しました:

convert -size 2000x1200 Slide3.png Slide3_converted_smaller.svg

しかし、サイコロはありません。同じサイズ。

17
Guido Anselmi

SVGはベクター画像形式であるため、ラスター画像(jpg、png、gifなど)をsvgに変換することは複雑な作業になる可能性があります。

私は単純な画像を変換しようとしました:赤い円と青い正方形の白い背景を使用して:

convert input.png output.svg

このコマンドで作成されたsvgファイルのサンプルを次に示します。

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg width="800" height="600">
  <circle cx="0" cy="0" r="1" fill="white"/>
  <circle cx="1" cy="0" r="1" fill="white"/>
  ...
  <circle cx="218" cy="151" r="1" fill="rgb(255,247,247)"/>
  <circle cx="219" cy="151" r="1" fill="rgb(255,40,40)"/>
  <circle cx="220" cy="151" r="1" fill="red"/>
  <circle cx="221" cy="151" r="1" fill="rgb(255,127,127)"/>
  <circle cx="222" cy="151" r="1" fill="white"/>
  <circle cx="223" cy="151" r="1" fill="white"/>
  ...
  <circle cx="799" cy="599" r="1" fill="white"/>
</svg>

基本的に、ImageMagickはピクセルごとに半径1pxの円を作成し、正しい色でペイントしました。 5KB pngから始めて、私の出力は22MB svgでした。これは、取得した巨大なファイルサイズを説明しています。

ImageMagickのドキュメント( ここ を参照)によると、これは「AutoTrace」( ここ を参照)が原因で発生します。ライブラリがありません:

「「AutoTrace」ライブラリがインストールされてIMにコンパイルされていない場合、生成されるSVG出力は膨大な数の単一ピクセル円になり、バイナリ結果、滑らかなSVG輪郭画像ではなく。このような画像は比較すると巨大であり、SVGレンダリングでレンダリングするのに非常に長い時間がかかることがよくあります。 「」

autoTraceライブラリをインストールしたら、次のような方法で試すことができます。

convert autotrace:A.gif  A_traced.png
16
Andrea