Menu

Inkscape+LaTeX SVG to ICO

← TOC    ↑ Home    I+L SVG TeX TeX PDF EPS SVG PNG JPEG ICO XPM

Inkscape+LaTeX SVG to ICO

This page shows how to convert an SVG file x-il.svg from inkscape containing LaTeX special text into a Windows icon file.

If the base file name before the extension ends in "-il" the gxhconvert script assumes the file is an SVG file created by the inkscape program requiring LaTeX to process the texts.

The drawing must be a 1 inch × 1 inch square.


Choice 1: Use gxhconvert

Procedure

gxhconvert -o=ico x-il.svg

See the [gxhconvert manual] for a full description of the gxhconvert script.

Further options

Option Purpose
-a
--alpha
Create alpha channel.
Untouched input regions result in transparent output regions.
--svg-area=area String
Area to export, one from:
  • drawing
    to export just the area containing drawing elements,
  • snap
    to enlarge the drawing area to the next snap grid points,
  • page
    to export the entire page.
--svg-latex Required, if the file name does not end in "-il" to indicate the texts must be processed by LaTeX.

Choice 2: Manual conversion, create alpha channel

Procedure

Step 1: Create x-il.pdf and x-il.pdf_tex

inkscape --batch-process --export-type=pdf --export-overwrite --export-filename=x-il.pdf --export-area-drawing --export-latex x-il.svg

Step 2: Find image dimensions

The x-il.pdf_tex file sets a unit length in bp, a width factor and a height factor. Multiplication of the factors with the unit length results in width and height in bp. Round both values upwards to the next integer number.

Step 3: Write x.tex file

In line 14 and 15 replace the numbers 210 and 58 by the values just calculated.

\documentclass[12pt]{article}
% begin font setup
\usepackage[T1]{fontenc}
\usepackage{mathptmx}
\usepackage[scaled=.92]{helvet}
\usepackage{courier}
% end font setup
% begin other packages
\usepackage{textcomp}
\usepackage[intlimits]{amsmath}
% end other packages
\usepackage{graphicx}
\usepackage{color}
\setlength{\paperwidth}{210bp}
\setlength{\paperheight}{58bp}
\pagestyle{empty}
\setlength{\voffset}{-1in}
\setlength{\topmargin}{0bp}
\setlength{\headheight}{0bp}
\setlength{\headsep}{0bp}
\setlength{\topskip}{0bp}
\setlength{\hoffset}{-1in}
\setlength{\oddsidemargin}{0bp}
\setlength{\evensidemargin}{0bp}
\setlength{\marginparwidth}{0bp}
\setlength{\marginparsep}{0bp}
\setlength{\textwidth}{\paperwidth}
\setlength{\textheight}{\paperheight}
\setlength{\parskip}{0bp}
\setlength{\parindent}{0bp}
\setlength{\pdfpagewidth}{\paperwidth}
\setlength{\pdfpageheight}{\paperheight}
\begin{document}%
\input{x-il.pdf_tex}%
\end{document}

Step 4: Run pdflatex

pdflatex x

Step 5: Convert to SVG

pdf2svg x.pdf x.svg

Step 6: Create 32 bit color PNG files

inkscape --batch-process --export-type=png --export-overwrite --export-filename=x-48.png --export-dpi=48 --export-area-page x.svg
inkscape --batch-process --export-type=png --export-overwrite --export-filename=x-32.png --export-dpi=32 --export-area-page x.svg
inkscape --batch-process --export-type=png --export-overwrite --export-filename=x-24.png --export-dpi=24 --export-area-page x.svg
inkscape --batch-process --export-type=png --export-overwrite --export-filename=x-16.png --export-dpi=16 --export-area-page x.svg

Step 7: Create 8-bit color PNG files and alpha PGMs

pngnq x-48.png
pngnq x-32.png
pngnq x-24.png
pngnq x-16.png
pngtopam -alpha x-48.png > x-48.pgm
pngtopam -alpha x-32.png > x-32.pgm
pngtopam -alpha x-24.png > x-24.pgm
pngtopam -alpha x-16.png > x-16.pgm

Step 8: Create 24-bit, 8-bit and 4-bit PAM files

pngtopam -mix x-48.png > x-48-24.ppm
pngtopam -mix x-32.png > x-32-24.ppm
pngtopam -mix x-24.png > x-24-24.ppm
pngtopam -mix x-16.png > x-16-24.ppm
pngtopam -mix x-48-nq8.png > x-48-08.ppm
pngtopam -mix x-32-nq8.png > x-32-08.ppm
pngtopam -mix x-24-nq8.png > x-24-08.ppm
pngtopam -mix x-16-nq8.png > x-16-08.ppm
pnmquant 16 x-48-24.ppm > x-48-04.ppm
pnmquant 16 x-32-24.ppm > x-32-04.ppm
pnmquant 16 x-24-24.ppm > x-24-04.ppm
pnmquant 16 x-16-24.ppm > x-16-04.ppm

Step 9: Produce ICO file

PPMS="x-48-24.ppm x-48.pgm x-48-08.ppm x-48.pgm x-48-04.ppm x-48.pgm"
PPMS="$PPMS x-32-24.ppm x-32.pgm x-32-08.ppm x-32.pgm x-32-04.ppm x-32.pgm"
PPMS="$PPMS x-24-24.ppm x-24.pgm x-24-08.ppm x-24.pgm x-24-04.ppm x-24.pgm"
PPMS="$PPMS x-16-24.ppm x-16.pgm x-16-08.ppm x-16.pgm x-16-04.ppm x-16.pgm"
ppmtowinicon -andpgms -truetransparent -output=x.ico $PPMS

Temporary files

  • x.tex
  • x.log
  • x.aux
  • x-il.pdf
  • x-il.pdf_tex
  • x.pdf
  • x.svg
  • x-48.png
  • x-48-nq8.png
  • x-48.pgm
  • x-48-24.ppm
  • x-48-08.ppm
  • x-48-04.ppm
  • x-32.png
  • x-32-nq8.png
  • x-32.pgm
  • x-32-24.ppm
  • x-32-08.ppm
  • x-32-04.ppm
  • x-24.png
  • x-24-nq8.png
  • x-24.pgm
  • x-24-24.ppm
  • x-24-08.ppm
  • x-24-04.ppm
  • x-16.png
  • x-16-nq8.png
  • x-16.pgm
  • x-16-24.ppm
  • x-16-08.ppm
  • x-16-04.ppm

Choice 3: Manual conversion, no alpha channel

Procedure

Step 1: Create x-il.pdf and x-il.pdf_tex

inkscape --batch-process --export-type=pdf --export-overwrite --export-filename=x-il.pdf --export-area-drawing --export-latex x-il.svg

Step 2: Find image dimensions

The x-il.pdf_tex file sets a unit length in bp, a width factor and a height factor. Multiplication of the factors with the unit length results in width and height in bp. Round both values upwards to the next integer number.

Step 3: Write x.tex file

In line 14 and 15 replace the numbers 210 and 58 by the values just calculated.

\documentclass[12pt]{article}
% begin font setup
\usepackage[T1]{fontenc}
\usepackage{mathptmx}
\usepackage[scaled=.92]{helvet}
\usepackage{courier}
% end font setup
% begin other packages
\usepackage{textcomp}
\usepackage[intlimits]{amsmath}
% end other packages
\usepackage{graphicx}
\usepackage{color}
\setlength{\paperwidth}{210bp}
\setlength{\paperheight}{58bp}
\pagestyle{empty}
\setlength{\voffset}{-1in}
\setlength{\topmargin}{0bp}
\setlength{\headheight}{0bp}
\setlength{\headsep}{0bp}
\setlength{\topskip}{0bp}
\setlength{\hoffset}{-1in}
\setlength{\oddsidemargin}{0bp}
\setlength{\evensidemargin}{0bp}
\setlength{\marginparwidth}{0bp}
\setlength{\marginparsep}{0bp}
\setlength{\textwidth}{\paperwidth}
\setlength{\textheight}{\paperheight}
\setlength{\parskip}{0bp}
\setlength{\parindent}{0bp}
\setlength{\pdfpagewidth}{\paperwidth}
\setlength{\pdfpageheight}{\paperheight}
\begin{document}%
\input{x-il.pdf_tex}%
\end{document}

Step 4: Run pdflatex

pdflatex x

Step 5: Convert to SVG

pdf2svg x.pdf x.svg

Step 6: Create 24-bit color PPM and PNG files

pdftoppm -r 48 x.pdf > x-48-24.ppm
pdftoppm -r 32 x.pdf > x-32-24.ppm
pdftoppm -r 24 x.pdf > x-24-24.ppm
pdftoppm -r 16 x.pdf > x-16-24.ppm
pnmtopng x-48-24.ppm > x-48.png
pnmtopng x-32-24.ppm > x-32.png
pnmtopng x-24-24.ppm > x-24.png
pnmtopng x-16-24.ppm > x-16.png

Step 7: Create 8-bit color PNG and PPM files

pngnq x-48.png
pngnq x-32.png
pngnq x-24.png
pngnq x-16.png
pngtopam -mix x-48-nq8.png > x-48-08.ppm
pngtopam -mix x-32-nq8.png > x-32-08.ppm
pngtopam -mix x-24-nq8.png > x-24-08.ppm
pngtopam -mix x-16-nq8.png > x-16-08.ppm

Step 8: Create 4-bit PPM files

pnmquant 16 x-48-24.ppm > x-48-04.ppm
pnmquant 16 x-32-24.ppm > x-32-04.ppm
pnmquant 16 x-24-24.ppm > x-24-04.ppm
pnmquant 16 x-16-24.ppm > x-16-04.ppm

Step 9: Produce ICO file

PPMS="x-48-24.ppm x-48-08.ppm x-48-04.ppm"
PPMS="$PPMS x-32-24.ppm x-32-08.ppm x-32-04.ppm"
PPMS="$PPMS x-24-24.ppm x-24-08.ppm x-24-04.ppm"
PPMS="$PPMS x-16-24.ppm x-16-08.ppm x-16-04.ppm"
ppmtowinicon -output=x.ico $PPMS

Temporary files

  • x.tex
  • x.log
  • x.aux
  • x-il.pdf
  • x-il.pdf_tex
  • x.pdf
  • x.svg
  • x-48.png
  • x-48-nq8.png
  • x-48-24.ppm
  • x-48-08.ppm
  • x-48-04.ppm
  • x-32.png
  • x-32-nq8.png
  • x-32-24.ppm
  • x-32-08.ppm
  • x-32-04.ppm
  • x-24.png
  • x-24-nq8.png
  • x-24-24.ppm
  • x-24-08.ppm
  • x-24-04.ppm
  • x-16.png
  • x-16-nq8.png
  • x-16-24.ppm
  • x-16-08.ppm
  • x-16-04.ppm
← TOC    ↑ Home    I+L SVG TeX TeX PDF EPS SVG PNG JPEG ICO XPM

Related

Wiki: gxhconvert manual