Subject: TODO: Deprecate and remove XPM icons (replacing them with PPM)
From: Stefan Kangas <[email-masked]>
To: [email-masked]
Date: Wed, 29 Sep 2021 14:47:51 -0700
List-Id: <debbugs-submit.debbugs.gnu.org>

Severity: wishlist

In etc/TODO we have the following item:

    ** Deprecate and remove XPM icons
    Convert the XPM bitmaps to PPM, replace the PBMs with them and scrap
    the XPMs so that the color versions work generally.  (Requires care
    with the color used for the transparent regions.)

Here's what I've gathered so far, posting it here to save someone else
the trouble:

PPM (Portable PixelMap) is the color version of PBM (Portable BitMap)
and has as good support.[1]  XPM is an older format.

There are previous discussions on emacs-devel, but I have only been able
to track some of them down.  The TODO itself dates back to February 2003
(bf6394a6bed2).

I have tried to convert the images with netpbm using this:

    cd etc/images
    xpmtoppm --alphaout=attach.alpha attach.xpm | \
          pnmcomp -alpha=attach.alpha - > attach.ppm
    pnmcomp: bad magic number 0x0 - not a PAM, PPM, PGM, or PBM file

But then I don't get any further.

I have also tried with the newer pamcomp (that replaces pnmcomp):

    cd etc/images
    xpmtoppm --alphaout=attach.alpha attach.xpm | \
             pamcomp attach.alpha - atach.ppm

That just leads to an image that looks wrong.

With GraphicsMagick, I used "gc convert attach.xpm attach.ppm" but the
results looked all wrong.

With GIMP it seems like I can produce images that preserve the alpha
channels correctly, but perhaps not in all cases.  It also seems like
different files produce different results, maybe?  But on balance,
perhaps a combination of GIMP and GraphicsMagick would be best.

---

Be aware that Debian has an old forked version of netpbm from 2002, so
if you want to use xpmtoppm, you need to install netpbm from
SourceForge.  Luckily, there are .deb packages available (as well as
source tarballs).

Footnotes:
[1]  https://lists.gnu.org/r/emacs-devel/2002-09/msg00949.html