2017-10-17 10 views
0

UPDATE SVGイメージの切り抜き問題がImageMagickに縮小されました。つまり、convert birthday_cake.svg birthday_cake.pngは私の特定のインストールで、つまりUbuntuでクリップbirthday_cake.pngを生成します。私は現在、さらに調査中です。ImageMagickがこのSVGイメージを切り取るのはなぜですか?U + 1F382グリフのレンダリング

convertの私のバージョンは6.7.7-10であると私は問題になる可能性がありますように、最新バージョンは7.0.7-8で現在参照してください。

元の質問は、私はemacsの中にそれをロードされますが、下の3分の1がトリミング取得された後、SVGファイルをダウンロードした

に従います。また、右側からわずかな量が切り取られています。ただし、ファイルはで、はFirefoxやGoogle Chromeでクロップされません。ちなみに、このSVGはU + 1F382誕生日ケーキのUnicodeグリフのレンダリングです。

SVG image getting cropped when loaded into emacs

私は前に任意のSVGや画像ファイルに対してこのトリミングに気づいたことがありません。だから私は、emacsとこの特定のSVGファイルとの間には奇妙なやりとりがあると思う。

これについてこれは何ですか特に emacs内でトリミングするSVGファイルですか?さらに、このSVGファイルの高さと幅全体を表示するようにemacsに指示するにはどうすればよいですか?

$ wget -q http://www.fileformat.info/info/unicode/char/1f382/birthday_cake.svg 
$ emacs-snapshot -Q birthday_cake.svg --geometry 60x24 -eval '(set-frame-name "BAD SVG")' 
$ emacs-snapshot --version | head -1 
GNU Emacs 25.1.50.2 
$ firefox birthday_cake.svg 

SVG imagemagick-typesに含まある:ここでは

(member 'SVG (imagemagick-types)) 
(SVG SVGZ TEXT TGA THUMBNAIL TIFF TIFF64 TILE TIM TTC TTF TXT ...) 

この投稿のために短縮さ12キロバイトパスとSVGファイルの要約版です:

<?xml version="1.0"?> 
<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.0//EN' 'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd'> 
<svg fill-opacity="1" xmlns:xlink="http://www.w3.org/1999/xlink" color-rendering="auto" 
    color-interpolation="auto" text-rendering="auto" stroke="black" stroke-linecap="square" 
    stroke-miterlimit="10" shape-rendering="auto" stroke-opacity="1" fill="black" stroke-dasharray="none" 
    font-weight="normal" stroke-width="1" xmlns="http://www.w3.org/2000/svg" font-family="&apos;Dialog&apos;" 
    font-style="normal" stroke-linejoin="miter" font-size="12" stroke-dashoffset="0" image-rendering="auto"> 
    <!--Unicode Character 'BIRTHDAY CAKE' (U+1F382)--> 
    <defs id="genericDefs" /> 
    <g><g> 
    <path d="M285.1875 252 Q285.1875 274.5 ... 118.5469 221.3438 Z" stroke="none" /> 
    </g></g></svg> 

は、いくつかのですこの画像クロッピングに貢献するSVGタグの属性は?もしそうなら、それらの要素を箇条書きし、相互作用を説明してください。

+0

を自分のレンダリングを複製することができ、ツールチェーンとは何ですか? emacsはImageMagickを使用しますが、ImageMagickはレンダリングに何を使用していますか? librsvgがインストールされていますか? – ccprog

+0

私は現在、librsvgをインストールしていません。あなたがツールチェーンについて質問すると、私は 'convert birthday_cake.svg birthday_cake.png'を試してみることにしました。そして 'birthday_cake.png'は同じ切り詰めを示しています。問題はImageMagickと** emacsではありません。私はImageMagickをさらに調査するつもりですが、それ以上の有益なコメントをここで確認してください。 –

+0

ImageMagickは、システムでそれらを見つけたら[レンダリングSVG](http://www.imagemagick.org/script/formats.php)にInkscapeまたはlibrsvgを使用します。いずれも利用できない場合、ImageMagickは内部のSVGレンダラーに戻ります。 – ccprog

答えて

1

マルチパートツールチェーンを使用してレンダリングされたイメージを取得しています。 emacsはImageMagickを使用してイメージをレンダリングし、ImageMagickはlibrsvgを使用してベクトルイメージをラスタイメージに変換します。

表示されるエラーは、そのルートがレンダラーになく、障害のあるSVGファイルにあります。 widthまたはheight属性もviewBox属性も定義していません。したがって、画像の固有の幅および高さを確立することはできない。 librsvgは、含まれているグラフィカル要素の結合されたバウンディングボックスを利用して、いくつかの代替値を見つけることによってこれを解決しようとします。残念ながら、それはエラーでそうします。

あなたは

{ 
    x: 11.531200408935547, 
    y: 68.4843978881836, 
    width: 273.65631103515625, 
    height: 272.8125 
} 

librsvgがある限り同じ結果になっている結果をコンソールブラウザにロードとJavascriptで

document.querySelector('svg').getBBox() 

を実行することができ、コンテンツのためのバウンディングボックスを見つけるには出力画像は273px×272pxですが、ボックスの左上の境界が画像ビューポートの左上の境界と一致するように内容が変換されないため、右と下の側で切り取られます。

私はソースWebページ、www.fileformat.infoは、このSVGをレンダリングする方法を知りませんが、あなたはビューボックス属性で

viewBox="-50 60 400 400" 
+0

これはいくつかの良い説明です...そして、ミストはもう少し離れて押し出されます。私はlibrsvgをインストールしましたが、私は 'apt'パッケージマネージャの出力を誤って読みました。また、librsvgの上にInkscapeとバイナリコマンドラインツールをインストールしています。さらに、私は、 'inkscape --verb = FitCanvasToDrawing --verb = FileSave --verb = FileClose * .svg'を使って、Inkscapeに欠陥のあるSVGファイルを修正させる方法を学びました。結果として得られるSVGは、svgタグにwidth属性とheight属性を持つようになりました。 –

+0

この方法では、「パディング」なしでタイトなクロップを得ることができます。これで十分ですが、それ以上の情報がないので、とにかく視覚的に再構築する必要があります。 – ccprog

関連する問題