emacs drives me nuts
emacs drives me nuts

Reputation: 4002

ImageMagick: Zoom SVG and convert it to PNG?

I have the following 8×8 SVG graphic for which I want a scaled version of as PNG. (I found no way to upload SVG so you can see it.) The SVG consist of 8×8 black/white "pixels".

<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8" viewBox="0 0 8 8">
<path fill="#fff" d="M0,0H8V8H0"/>
<path fill="#000" d="M0,0H7V1H6V0H5V3H8V2H7V5H6V5H6V4H8V6H7V8H8V7H1V8H2V5H3V6H4V7H5V4H2V1H3V2H4V3H1V4H0"
fill-rule="evenodd"/>
</svg>

When I am using ImageMagick's

> convert a3x2.svg -scale 80x80 a3x2.png

as of this answer for scaling a PNG, then I am getting the following result which has nothing to do with the input:

result of conversion

What I want is a scaled black/white PNG where each pixel has a "size" of 10×10; no smoothing or dithering. What does not work is -resize 80x80 (will blur and still has wrong pixel values).


Edit

According to this answer, a solution with Inkscape is

> inkscape -w 80 -h 80 a3x2.svg -o a3x2.png

which works, but I'd rather use ImageMagick. For reference, here is the result with Inkscape so you can see that the result of convert from above is not as expected.

PNG Result with Imagemagick

> convert -version

Version: ImageMagick 6.9.10-23 Q16 x86_64 20190101 https://imagemagick.org
Copyright: © 1999-2019 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC Modules OpenMP 
Delegates (built-in): bzlib djvu fftw fontconfig freetype jbig jng jpeg lcms lqr ltdl lzma openexr pangocairo png tiff webp wmf x xml zlib

Edit 2

As asked in a comment, here is the result of

> convert -verbose a3x2.svg txt:

'inkscape' '/tmp/magick-445746DLWe3-eb4nrF' --export-filename='/tmp/magick-445746FrMsKiicip2C' --export-dpi='96,96' --export-background='rgb(100%,100%,100%)' --export-background-opacity='1' > '/tmp/magick-445746cd-3Bn1wlmb8' 2>&1
mvg:/tmp/magick-445746UpfR0goE2RRA=>/tmp/magick-445746UpfR0goE2RRA MVG 8x8 8x8+0+0 16-bit sRGB 445B 0.000u 0:00.000
a3x2.svg MVG 8x8 8x8+0+0 16-bit sRGB 445B 0.000u 0:00.000
# ImageMagick pixel enumeration: 8,8,65535,srgba
0,0: (0,0,0,65535)  #000000000000FFFF  black
1,0: (0,0,0,65535)  #000000000000FFFF  black
2,0: (0,0,0,65535)  #000000000000FFFF  black
3,0: (0,0,0,65535)  #000000000000FFFF  black
4,0: (0,0,0,65535)  #000000000000FFFF  black
5,0: (0,0,0,65535)  #000000000000FFFF  black
6,0: (0,0,0,65535)  #000000000000FFFF  black
7,0: (0,0,0,65535)  #000000000000FFFF  black
0,1: (0,0,0,65535)  #000000000000FFFF  black
1,1: (0,0,0,65535)  #000000000000FFFF  black
2,1: (0,0,0,65535)  #000000000000FFFF  black
3,1: (0,0,0,65535)  #000000000000FFFF  black
4,1: (0,0,0,65535)  #000000000000FFFF  black
5,1: (0,0,0,65535)  #000000000000FFFF  black
6,1: (0,0,0,65535)  #000000000000FFFF  black
7,1: (0,0,0,65535)  #000000000000FFFF  black
0,2: (0,0,0,65535)  #000000000000FFFF  black
1,2: (0,0,0,65535)  #000000000000FFFF  black
2,2: (0,0,0,65535)  #000000000000FFFF  black
3,2: (0,0,0,65535)  #000000000000FFFF  black
4,2: (0,0,0,65535)  #000000000000FFFF  black
5,2: (0,0,0,65535)  #000000000000FFFF  black
6,2: (61439,61439,61439,65535)  #EFFFEFFFEFFFFFFF  srgba(94%,94%,94%,1)
7,2: (0,0,0,65535)  #000000000000FFFF  black
0,3: (0,0,0,65535)  #000000000000FFFF  black
1,3: (0,0,0,65535)  #000000000000FFFF  black
2,3: (0,0,0,65535)  #000000000000FFFF  black
3,3: (0,0,0,65535)  #000000000000FFFF  black
4,3: (0,0,0,65535)  #000000000000FFFF  black
5,3: (0,0,0,65535)  #000000000000FFFF  black
6,3: (0,0,0,65535)  #000000000000FFFF  black
7,3: (0,0,0,65535)  #000000000000FFFF  black
0,4: (0,0,0,65535)  #000000000000FFFF  black
1,4: (0,0,0,65535)  #000000000000FFFF  black
2,4: (0,0,0,65535)  #000000000000FFFF  black
3,4: (0,0,0,65535)  #000000000000FFFF  black
4,4: (0,0,0,65535)  #000000000000FFFF  black
5,4: (0,0,0,65535)  #000000000000FFFF  black
6,4: (0,0,0,65535)  #000000000000FFFF  black
7,4: (0,0,0,65535)  #000000000000FFFF  black
0,5: (65535,65535,65535,65535)  #FFFFFFFFFFFFFFFF  white
1,5: (61439,61439,61439,65535)  #EFFFEFFFEFFFFFFF  srgba(94%,94%,94%,1)
2,5: (0,0,0,65535)  #000000000000FFFF  blaca3x2.svg=> MVG 8x8 8x8+0+0 16-bit sRGB 445B 0.000u 0:00.000
k
3,5: (0,0,0,65535)  #000000000000FFFF  black
4,5: (61439,61439,61439,65535)  #EFFFEFFFEFFFFFFF  srgba(94%,94%,94%,1)
5,5: (0,0,0,65535)  #000000000000FFFF  black
6,5: (0,0,0,65535)  #000000000000FFFF  black
7,5: (0,0,0,65535)  #000000000000FFFF  black
0,6: (65535,65535,65535,65535)  #FFFFFFFFFFFFFFFF  white
1,6: (65535,65535,65535,65535)  #FFFFFFFFFFFFFFFF  white
2,6: (0,0,0,65535)  #000000000000FFFF  black
3,6: (0,0,0,65535)  #000000000000FFFF  black
4,6: (0,0,0,65535)  #000000000000FFFF  black
5,6: (0,0,0,65535)  #000000000000FFFF  black
6,6: (0,0,0,65535)  #000000000000FFFF  black
7,6: (0,0,0,65535)  #000000000000FFFF  black
0,7: (65535,65535,65535,65535)  #FFFFFFFFFFFFFFFF  white
1,7: (0,0,0,65535)  #000000000000FFFF  black
2,7: (0,0,0,65535)  #000000000000FFFF  black
3,7: (0,0,0,65535)  #000000000000FFFF  black
4,7: (0,0,0,65535)  #000000000000FFFF  black
5,7: (0,0,0,65535)  #000000000000FFFF  black
6,7: (0,0,0,65535)  #000000000000FFFF  black
7,7: (0,0,0,65535)  #000000000000FFFF  black

Upvotes: 1

Views: 488

Answers (2)

emacs drives me nuts
emacs drives me nuts

Reputation: 4002

What worked for me on x86_64-linux-gnu is to update from v6.9 to v7.1 and then use

> convert a3x2.svg -scale 80x80 a3x2.png

as expected. More specifically, I downloaded ImageMagick-7.1.0-60.tar.gz from https://imagemagick.org/archive/ (there is also ImageMagick.tar.gz which presumably is the newest version, but I am not sure about that so that I downloaded 7.1 explicitly).

  • Extract the sources:
    tar xfz ImageMagick-7.1.0-60.tar.gz
  • Suppose the sources are at /home/me/sources/ImageMagick-7.1.0-60. Create a build directory at /home/me/build/imagemagick-7.1.
  • cd to the build directory and configure:
    cd /home/me/build/imagemagick-7.1
    /home/me/sources/ImageMagick-7.1.0-60/configure --prefix=/home/me/install/imagemagick-7.1
  • Run make and then make install.
  • Add the /home/me/install/imagemagick-7.1/bin directory to PATH, alternative use alias or links to point to the tools located there.

To my great surprise, I didn't get any dependency problems, and everything appears to work fine for now. FYI, using the RPM packages did not work for me due to missing dependencies (≈50 of them).

Upvotes: 1

Mark Setchell
Mark Setchell

Reputation: 207873

Mmmm... I don't know what's going on, but I can confirm that if I use the rsvg delegate in place of the MVG delegate, I get the correct result:

enter image description here

I find it simplest to use the docker alpine image to demonstrate because it is very current and has an extensive set of delegates without any user configuration. So, I just did:

# Start latest alpine image, bind mounting current working directory to /work
docker run -it -v "$(pwd)":/work alpine

apk update && apk add imagemagick

identify -version
Version: ImageMagick 7.1.0-52 Q16-HDRI aarch64 20549 https://imagemagick.org
Copyright: (C) 1999 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI Modules 
Delegates (built-in): bzlib cairo fontconfig freetype gslib heic jng jpeg jxl lcms ltdl lzma png ps rsvg tiff webp x xml zlib
Compiler: gcc (12.2)

magick image.svg -scale 80x80 result.png

Upvotes: 2

Related Questions