~jkaivo/freeonebook

b94d852b748d7836c301a86d0fee83533d97ea3b — Jakob Kaivo 3 years ago 004ac73
use MagickWand instead of MagickCore
2 files changed, 22 insertions(+), 49 deletions(-)

M Makefile
M convert.c
M Makefile => Makefile +2 -2
@@ 1,8 1,8 @@
CROSS=arm-linux-gnueabihf
DEPLIBS=MagickCore libpng16 zlib
DEPLIBS=MagickWand libpng16 zlib
PKG_CONFIG_PATH=./deps/lib/pkgconfig
CC=$(CROSS)-gcc
CFLAGS=-Wall -Wextra -I. $$(PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --cflags MagickCore)
CFLAGS=-Wall -Wextra -I. $$(PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --cflags MagickWand)
LDFLAGS=-lpthread $$(PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --libs-only-L $(DEPLIBS))
LDLIBS=$$(PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --libs-only-l $(DEPLIBS)) -lm


M convert.c => convert.c +20 -47
@@ 1,65 1,38 @@
#include <stdio.h>
#include <string.h>

#define MAGICKCORE_QUANTUM_DEPTH 8
#define MAGICKCORE_HDRI_ENABLE 0
#include <MagickCore/MagickCore.h>
#include <MagickWand/MagickWand.h>

int convert(const char *in, const char *out, int width, int height)
{
	if (!IsMagickCoreInstantiated()) {
		MagickCoreGenesis(NULL, MagickFalse);
	}

	printf("converting image %s\n", in);
	static MagickWand *w = NULL;
	static PixelWand *pixel = NULL;

	ExceptionInfo *exception = AcquireExceptionInfo();
	if (!IsMagickWandInstantiated()) {
		MagickWandGenesis();
		w = NewMagickWand();
		pixel = NewPixelWand();
	}

	printf("reading original image\n");
	ImageInfo *info = CloneImageInfo((ImageInfo*)NULL);
	if (info == NULL) {
		printf("couldn't create new ImageInfo: ");
		CatchException(exception);
	if (!MagickReadImage(w, in)) {
		printf("couldn't read '%s'\n", in);
		return 1;
	}
	strcpy(info->filename, in);
	Image *original = ReadImage(info, exception);
	if (original == NULL) {
		printf("couldn't read original: ");
		CatchException(exception);
		return 0;
	}

	printf("resizing\n");
	Image *resized = ResizeImage(original, width, height, LanczosFilter, exception);
	DestroyImage(original);
	if (resized == NULL) {
		printf("couldn't resize: ");
		CatchException(exception);
		return 0;
	if (!MagickAdaptiveResizeImage(w, width, height)) {
		printf("couldn't resize image\n");
		return 1;
	}

	printf("rotating\n");
	Image *rotated = IntegralRotateImage(resized, 3, exception);
	DestroyImage(resized);
	if (rotated == NULL) {
		printf("couldn't rotate: ");
		CatchException(exception);
		return 0;
	if (!MagickRotateImage(w, pixel, 270)) {
		printf("couldn't rotate image\n");
		return 1;
	}

	printf("writing grayscale\n");
	strcpy(info->filename, out);
	if (!WriteImage(info, rotated, exception)) {
		printf("couldn't save converted image (%s): ", out);
		CatchException(exception);
		return 0;
	if (!MagickWriteImage(w, out)) {
		printf("couldn't write '%s'\n", out);
		return 1;
	}

	printf("cleaning up\n");
	DestroyImage(rotated);
	DestroyImageInfo(info);
	DestroyExceptionInfo(exception);

	return 1;
	return 0;
}