Esempio n. 1
0
def print_image_sizes(dir=os.curdir):
    """Calculate image sizes.
    """
    import ImageH, glob
    os.chdir(dir)
    filelist = []
    suffixlist = ('*.gif','*.GIF','*.jpg','*.JPG','*.jpeg','*.JPEG','*.png','*.PNG')
    for suffix in suffixlist:
        filelist = filelist + glob.glob1('', suffix)
    for file in filelist:
        (width, height) = ImageH.open(file).size
        print "('%s', %d, %d)" % (file, width, height)
Esempio n. 2
0
def _save(im, fp, tile):
    "Helper to save image based on tile list"

    im.load()
    if not hasattr(im, "encoderconfig"):
        im.encoderconfig = ()
    tile.sort(_tilesort)
    bufsize = max(MAXBLOCK, im.size[0] * 4)  # see RawEncode.c
    try:
        fh = fp.fileno()
        fp.flush()
    except AttributeError:
        # compress to Python file-compatible object
        for e, b, o, a in tile:
            e = ImageH._getencoder(im.mode, e, a, im.encoderconfig)
            if o > 0:
                fp.seek(o, 0)
            e.setimage(im.im, b)
            while 1:
                l, s, d = e.encode(bufsize)
                fp.write(d)
                if s:
                    break
            if s < 0:
                raise IOError, "encoder error %d when writing image file" % s
    else:
        # slight speedup: compress to real file object
        for e, b, o, a in tile:
            e = ImageH._getencoder(im.mode, e, a, im.encoderconfig)
            if o > 0:
                fp.seek(o, 0)
            e.setimage(im.im, b)
            s = e.encode_to_file(fh, bufsize)
            if s < 0:
                raise IOError, "encoder error %d when writing image file" % s
    try:
        fp.flush()
    except:
        pass
Esempio n. 3
0
def print_image_sizes(dir=os.curdir):
    """Calculate image sizes.
    """
    import ImageH, glob
    os.chdir(dir)
    filelist = []
    suffixlist = ('*.gif', '*.GIF', '*.jpg', '*.JPG', '*.jpeg', '*.JPEG',
                  '*.png', '*.PNG')
    for suffix in suffixlist:
        filelist = filelist + glob.glob1('', suffix)
    for file in filelist:
        (width, height) = ImageH.open(file).size
        print "('%s', %d, %d)" % (file, width, height)
Esempio n. 4
0
def _save(im, fp, tile):
    "Helper to save image based on tile list"

    im.load()
    if not hasattr(im, "encoderconfig"):
	im.encoderconfig = ()
    tile.sort(_tilesort)
    bufsize = max(MAXBLOCK, im.size[0] * 4) # see RawEncode.c
    try:
	fh = fp.fileno()
	fp.flush()
    except AttributeError:
	# compress to Python file-compatible object
	for e, b, o, a in tile:
	    e = ImageH._getencoder(im.mode, e, a, im.encoderconfig)
	    if o > 0:
		fp.seek(o, 0)
	    e.setimage(im.im, b)
	    while 1:
		l, s, d = e.encode(bufsize)
		fp.write(d)
		if s:
		    break
	    if s < 0:
		raise IOError, "encoder error %d when writing image file" % s
    else:
	# slight speedup: compress to real file object
	for e, b, o, a in tile:
	    e = ImageH._getencoder(im.mode, e, a, im.encoderconfig)
	    if o > 0:
		fp.seek(o, 0)
	    e.setimage(im.im, b)
	    s = e.encode_to_file(fh, bufsize)
	    if s < 0:
		raise IOError, "encoder error %d when writing image file" % s
    try:
        fp.flush()
    except: pass
Esempio n. 5
0
    except KeyError:
	raise IOError, "cannot write mode %s as JPEG" % im.mode
    # get keyword arguments
    im.encoderconfig = (_fetch(im.encoderinfo, "quality", 0),
			im.encoderinfo.has_key("progressive"),
			_fetch(im.encoderinfo, "smooth", 0),
			im.encoderinfo.has_key("optimize"),
			_fetch(im.encoderinfo, "streamtype", 0))
    ImageFileH._save(im, fp, [("jpeg", (0,0)+im.size, 0, rawmode)])

def _save_hack(im, fp, filename):
    # ALTERNATIVE: handle JPEGs via the IJG command line utilities.
    import os
    file = im._dump()
    os.system("cjpeg %s >%s" % (file, filename))
    try: os.unlink(file)
    except: pass

# -------------------------------------------------------------------q-
# Registry stuff

ImageH.register_open("JPEG", JpegImageFile, _accept)
ImageH.register_save("JPEG", _save)

ImageH.register_extension("JPEG", ".jfif")
ImageH.register_extension("JPEG", ".jpe")
ImageH.register_extension("JPEG", ".jpg")
ImageH.register_extension("JPEG", ".jpeg")

ImageH.register_mime("JPEG", "image/jpeg")
Esempio n. 6
0
    except KeyError:
	raise IOError, "cannot write mode %s as JPEG" % im.mode
    # get keyword arguments
    im.encoderconfig = (_fetch(im.encoderinfo, "quality", 0),
			im.encoderinfo.has_key("progressive"),
			_fetch(im.encoderinfo, "smooth", 0),
			im.encoderinfo.has_key("optimize"),
			_fetch(im.encoderinfo, "streamtype", 0))
    ImageFileH._save(im, fp, [("jpeg", (0,0)+im.size, 0, rawmode)])

def _save_hack(im, fp, filename):
    # ALTERNATIVE: handle JPEGs via the IJG command line utilities.
    import os
    file = im._dump()
    os.system("cjpeg %s >%s" % (file, filename))
    try: os.unlink(file)
    except: pass

# -------------------------------------------------------------------q-
# Registry stuff

ImageH.register_open("JPEG", JpegImageFile, _accept)
ImageH.register_save("JPEG", _save)

ImageH.register_extension("JPEG", ".jfif")
ImageH.register_extension("JPEG", ".jpe")
ImageH.register_extension("JPEG", ".jpg")
ImageH.register_extension("JPEG", ".jpeg")

ImageH.register_mime("JPEG", "image/jpeg")
Esempio n. 7
0
    def load(self):
        "Load image data based on tile list"

        ImageH.Image.load(self)

        if self.tile == None:
            raise IOError, "cannot load this image"
        if not self.tile:
            return

        # ------------------------------------------------------------
        # memory mapping.

        self.map = None

        if self.filename and len(self.tile) == 1:
            d, e, o, a = self.tile[0]
            if d == "raw" and a[0] in ("L", "P", "RGBX", "RGBA"):
                # FIXME: add support for "F" and "I" too
                try:
                    self.map = ImageH.core.map(self.filename)
                    self.map.seek(o)
                    self.im = self.map.readimage(self.mode, self.size, a[1],
                                                 a[2])
                except (AttributeError, IOError):
                    self.map = None

        # create image if necessary
        if not self.im or\
           self.im.mode != self.mode or self.im.size != self.size:
            self.im = ImageH.core.new(self.mode, self.size)

        # create palette (optional)
        if self.mode == "P":
            ImageH.Image.load(self)

        if not self.map:

            # process tiles in file order
            self.tile.sort(_tilesort)

            for d, e, o, a in self.tile:
                d = ImageH._getdecoder(d, e, a, self.decoderconfig)
                self.load_seek(o)
                try:
                    d.setimage(self.im, e)
                except ValueError:
                    continue
                try:
                    # FIXME: This is a hack to handle TIFF's JpegTables tag.
                    b = self.tile_prefix
                except AttributeError:
                    b = ""
                t = len(b)
                while 1:
                    s = self.load_read(self.decodermaxblock)
                    if not s:
                        self.tile = []
                        raise IOError, "image file is truncated, %d bytes left" % len(
                            b)
                    b = b + s
                    n, e = d.decode(b)
                    if n < 0:
                        break
                    b = b[n:]
                    t = t + n

        self.tile = []
        self.fp = None  # might be shared

        if not self.map and e < 0:
            raise IOError, "decoder error %d when reading image file" % e

        # post processing
        if hasattr(self, "tile_post_rotate"):
            # FIXME: This is a hack to handle rotated PCD's
            self.im = self.im.rotate(self.tile_post_rotate)
            self.size = self.im.size

        self.load_end()
Esempio n. 8
0
    def load(self):
	"Load image data based on tile list"

	ImageH.Image.load(self)

	if self.tile == None:
	    raise IOError, "cannot load this image"
	if not self.tile:
	    return

	# ------------------------------------------------------------
	# memory mapping.  

	self.map = None

	if self.filename and len(self.tile) == 1:
	    d, e, o, a = self.tile[0]
	    if d == "raw" and a[0] in ("L", "P", "RGBX", "RGBA"):
		# FIXME: add support for "F" and "I" too
		try:
		    self.map = ImageH.core.map(self.filename)
		    self.map.seek(o)
		    self.im = self.map.readimage(
			self.mode, self.size, a[1], a[2]
			)
		except (AttributeError, IOError):
		    self.map = None

	# create image if necessary
	if not self.im or\
	   self.im.mode != self.mode or self.im.size != self.size:
	    self.im = ImageH.core.new(self.mode, self.size)

	# create palette (optional)
        if self.mode == "P":
            ImageH.Image.load(self)

	if not self.map:

	    # process tiles in file order
	    self.tile.sort(_tilesort)

	    for d, e, o, a in self.tile:
		d = ImageH._getdecoder(d, e, a, self.decoderconfig)
		self.load_seek(o)
		try:
		    d.setimage(self.im, e)
		except ValueError:
		    continue
		try:
		    # FIXME: This is a hack to handle TIFF's JpegTables tag.
		    b = self.tile_prefix
		except AttributeError:
		    b = ""
		t = len(b)
		while 1:
		    s = self.load_read(self.decodermaxblock)
		    if not s:
			self.tile = []
			raise IOError, "image file is truncated, %d bytes left" % len(b)
		    b = b + s
		    n, e = d.decode(b)
		    if n < 0:
			break
		    b = b[n:]
		    t = t + n

	self.tile = []
	self.fp = None # might be shared

	if not self.map and e < 0:
	    raise IOError, "decoder error %d when reading image file" % e

	# post processing
	if hasattr(self, "tile_post_rotate"):
	    # FIXME: This is a hack to handle rotated PCD's
	    self.im = self.im.rotate(self.tile_post_rotate)
	    self.size = self.im.size

	self.load_end()
Esempio n. 9
0
		 o16(offset[0]) +	# offset
		 o16(offset[1]) +
		 o16(im.size[0]) +	# size
		 o16(im.size[1]) +
		 chr(0) +		# flags
		 chr(8))		# bits

	ImageFileH._save(im, fp, [("gif", (0,0)+im.size, 0, RAWMODE[im.mode])])

	fp.write("\0") # end of image data

    finally:
	del im.encoderinfo

    return fp.data


# --------------------------------------------------------------------
# Registry

ImageH.register_open(GifImageFile.format, GifImageFile, _accept)
ImageH.register_save(GifImageFile.format, _save)
ImageH.register_extension(GifImageFile.format, ".gif")
ImageH.register_mime(GifImageFile.format, "image/gif")

#
# Uncomment the following line if you wish to use NETPBM/PBMPLUS
# instead of the built-in "uncompressed" GIF encoder

# Image.register_save(GifImageFile.format, _save_netpbm)
Esempio n. 10
0
        # local image header
        fp.write("," + o16(offset[0]) +  # offset
                 o16(offset[1]) + o16(im.size[0]) +  # size
                 o16(im.size[1]) + chr(0) +  # flags
                 chr(8))  # bits

        ImageFileH._save(im, fp,
                         [("gif", (0, 0) + im.size, 0, RAWMODE[im.mode])])

        fp.write("\0")  # end of image data

    finally:
        del im.encoderinfo

    return fp.data


# --------------------------------------------------------------------
# Registry

ImageH.register_open(GifImageFile.format, GifImageFile, _accept)
ImageH.register_save(GifImageFile.format, _save)
ImageH.register_extension(GifImageFile.format, ".gif")
ImageH.register_mime(GifImageFile.format, "image/gif")

#
# Uncomment the following line if you wish to use NETPBM/PBMPLUS
# instead of the built-in "uncompressed" GIF encoder

# Image.register_save(GifImageFile.format, _save_netpbm)
Esempio n. 11
0
	    pass
	def append(self, chunk):
	    self.data.append(chunk)

    def append(fp, cid, *data):
	data = string.join(data, "")
	hi, lo = ImageH.core.crc32(data, ImageH.core.crc32(cid))
	crc = o16(hi) + o16(lo)
	fp.append((cid, data, crc))

    fp = collector()

    try:
	im.encoderinfo = params
	_save(im, fp, None, append)
    finally:
	del im.encoderinfo

    return fp.data


# --------------------------------------------------------------------
# Registry

ImageH.register_open("PNG", PngImageFile, _accept)
ImageH.register_save("PNG", _save)

ImageH.register_extension("PNG", ".png")

ImageH.register_mime("PNG", "image/png")
Esempio n. 12
0
        def append(self, chunk):
            self.data.append(chunk)

    def append(fp, cid, *data):
        data = string.join(data, "")
        hi, lo = ImageH.core.crc32(data, ImageH.core.crc32(cid))
        crc = o16(hi) + o16(lo)
        fp.append((cid, data, crc))

    fp = collector()

    try:
        im.encoderinfo = params
        _save(im, fp, None, append)
    finally:
        del im.encoderinfo

    return fp.data


# --------------------------------------------------------------------
# Registry

ImageH.register_open("PNG", PngImageFile, _accept)
ImageH.register_save("PNG", _save)

ImageH.register_extension("PNG", ".png")

ImageH.register_mime("PNG", "image/png")