Deal with CMYK images by converting them to RGB. PIL does not invert CMYK images as of PIL 1.1.7, so the invert happens in ImageWriter.

pull/1/head
Jim Morrison 2012-01-24 16:18:36 -08:00
parent c7709045e9
commit 6413eb7de4
1 changed files with 14 additions and 2 deletions

View File

@ -1,9 +1,13 @@
#!/usr/bin/env python2
import cStringIO
import logging
import sys
import struct
import os, os.path
from PIL import Image
from PIL import ImageChops
from pdftypes import LITERALS_DCT_DECODE
from pdfcolor import LITERAL_DEVICE_GRAY, LITERAL_DEVICE_RGB
from pdfcolor import LITERAL_DEVICE_GRAY, LITERAL_DEVICE_RGB, LITERAL_DEVICE_CMYK
def align32(x):
return ((x+3)/4)*4
@ -77,7 +81,15 @@ class ImageWriter(object):
path = os.path.join(self.outdir, name)
fp = file(path, 'wb')
if ext == '.jpg':
fp.write(stream.get_rawdata())
raw_data = stream.get_rawdata()
if LITERAL_DEVICE_CMYK in image.colorspace:
ifp = cStringIO.StringIO(raw_data)
i = Image.open(ifp)
i = ImageChops.invert(i)
i = i.convert('RGB')
i.save(fp, 'JPEG')
else:
fp.write(raw_data)
elif image.bits == 1:
bmp = BMPWriter(fp, 1, width, height)
data = stream.get_data()