From 2bc167f8ee4d02e3fe35ac476558472b648ba867 Mon Sep 17 00:00:00 2001 From: Mike Gerwitz Date: Mon, 25 Mar 2019 14:00:27 -0400 Subject: [PATCH] XCF->PNG build In the end it would have been easier just to use Imagemagick for this. What a mess. Another example where a GUI seemed simple at first but then turned out to be a poor tool for the job. --- Makefile | 10 +++++++--- build-aux/xcf2png.scm | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 build-aux/xcf2png.scm diff --git a/Makefile b/Makefile index c1232d9..fba5f65 100644 --- a/Makefile +++ b/Makefile @@ -18,12 +18,16 @@ default: slides.pdf +xcfs = $(wildcard images/*.xcf) +pngs = $(xcfs:.xcf=.png) + +.PRECIOUS: $(pngs) + # TODO: No local init.el! Isolate required options so that this is actually # portable! -%.pdf: %.org %-preamble.tex +%.pdf: %.org %-preamble.tex $(pngs) emacs --batch -l ~/.emacs.d/init.el $< -f org-beamer-export-to-pdf # TODO: Either script with GIMP or just use ImageMagick and get rid of xcfs %.png: %.xcf - @echo 'Not yet implemented!' >&2 - @false + GIMP_INPUT="$<" GIMP_OUTPUT="$@" gimp -ni -b - < build-aux/xcf2png.scm diff --git a/build-aux/xcf2png.scm b/build-aux/xcf2png.scm new file mode 100644 index 0000000..8633fd1 --- /dev/null +++ b/build-aux/xcf2png.scm @@ -0,0 +1,35 @@ +;;; Convert XCF files to PNG +;;; +;;; Copyright (C) 2019 Mike Gerwitz +;;; +;;; This program is free software: you can redistribute it and/or modify +;;; it under the terms of the GNU General Public License as published by +;;; the Free Software Foundation, either version 3 of the License, or +;;; (at your option) any later version. +;;; +;;; This program is distributed in the hope that it will be useful, +;;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with this program. If not, see . + +(let* ((input-filename (getenv "GIMP_INPUT")) + (output-filename (getenv "GIMP_OUTPUT")) + (image (car (gimp-file-load RUN-NONINTERACTIVE + input-filename + input-filename))) + (layer (car (gimp-image-merge-visible-layers + image + CLIP-TO-IMAGE)))) + + (gimp-file-save RUN-NONINTERACTIVE + image + layer + output-filename + output-filename) + + (gimp-image-delete image) + (gimp-quit 0)) +