1

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
emacs drives me nuts
  • 2,785
  • 13
  • 23
  • **ImageMagick** seems to be fundamentally misunderstanding your SVG. It is nothing to do with the resizing. You can see it only produces 5 white pixels if you do `convert IMAGE.SVG txt:` Maybe the delegates are wrong. Try `convert -verbose IMAGE.SVG txt:` and see if it is using MVG, or rsvg, or inkscape. Click [edit] and paste the output into your question rather than the comments please. – Mark Setchell Feb 04 '23 at 10:10
  • @Mark Setchell: Thanks, I added the output to the question as **Edit 2**. – emacs drives me nuts Feb 04 '23 at 10:32

2 Answers2

2

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
Mark Setchell
  • 191,897
  • 31
  • 273
  • 432
1

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).

emacs drives me nuts
  • 2,785
  • 13
  • 23