Example #1
0
def getdata(im, offset = (0, 0), **params):
    """Return a list of strings representing this image.
       The first string is a local image header, the rest contains
       encoded image data."""

    class collector:
        data = []
        def write(self, data):
	    self.data.append(data)

    im.load() # make sure raster data is available

    fp = collector()

    try:
	im.encoderinfo = params

	# 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
Example #2
0
def _save(im, fp, filename):

    if _imaging_gif:
        # call external driver
        try:
            _imaging_gif.save(im, fp, filename)
            return
        except IOError:
            pass # write uncompressed file

    # header
    for s in getheader(im):
	fp.write(s)

    # local image header
    fp.write("," +
	     o16(0) + o16(0) +		# bounding box
	     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

    fp.write(";") # end of file

    try:
        fp.flush()
    except: pass
Example #3
0
def getdata(im, offset=(0, 0), **params):
    """Return a list of strings representing this image.
       The first string is a local image header, the rest contains
       encoded image data."""
    class collector:
        data = []

        def write(self, data):
            self.data.append(data)

    im.load()  # make sure raster data is available

    fp = collector()

    try:
        im.encoderinfo = params

        # 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
Example #4
0
def _save(im, fp, filename):

    if _imaging_gif:
        # call external driver
        try:
            _imaging_gif.save(im, fp, filename)
            return
        except IOError:
            pass  # write uncompressed file

    # header
    for s in getheader(im):
        fp.write(s)

    # local image header
    fp.write("," + o16(0) + o16(0) +  # bounding box
             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

    fp.write(";")  # end of file

    try:
        fp.flush()
    except:
        pass
Example #5
0
def _save(im, fp, filename):
    try:
        rawmode = RAWMODE[im.mode]
    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)])
Example #6
0
def _save(im, fp, filename):
    try:
        rawmode = RAWMODE[im.mode]
    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)])
Example #7
0
def _save(im, fp, filename, chunk = putchunk):
    # save an image to disk (called by the save method)

    mode = im.mode

    if mode == "P":

	#
	# attempt to minimize storage requirements for palette images

	if im.encoderinfo.has_key("bits"):

	    # number of bits specified by user
	    n = 1 << im.encoderinfo["bits"]

	else:

	    # check palette contents
	    n = 256 # FIXME

	if n <= 2:
	    bits = 1
	elif n <= 4:
	    bits = 2
	elif n <= 16:
	    bits = 4
	else:
	    bits = 8

	if bits != 8:
	    mode = "%s;%d" % (mode, bits)

    # encoder options
    if im.encoderinfo.has_key("dictionary"):
	dictionary = im.encoderinfo["dictionary"]
    else:
	dictionary = ""

    im.encoderconfig = (im.encoderinfo.has_key("optimize"), dictionary)

    # get the corresponding PNG mode
    try:
	rawmode, mode = _OUTMODES[mode]
    except KeyError:
	raise IOError, "cannot write mode %s as PNG" % mode

    #
    # write minimal PNG file

    fp.write(_MAGIC)

    chunk(fp, "IHDR",
	  o32(im.size[0]), o32(im.size[1]),	#  0: size
	  mode,					#  8: depth/type
	  chr(0),				# 10: compression
	  chr(0),				# 11: filter category
	  chr(0))				# 12: interlace flag

    if im.mode == "P":
	chunk(fp, "PLTE", im.im.getpalette("RGB"))

    if 0:
	# FIXME: to be supported some day
	chunk(fp, "gAMA", o32(int(gamma * 100000.0)))

    ImageFileH._save(im, _idat(fp, chunk), [("zip", (0,0)+im.size, 0, rawmode)])

    chunk(fp, "IEND", "")

    try:
        fp.flush()
    except: pass
def _save(im, fp, filename, chunk=putchunk):
    # save an image to disk (called by the save method)

    mode = im.mode

    if mode == "P":

        #
        # attempt to minimize storage requirements for palette images

        if im.encoderinfo.has_key("bits"):

            # number of bits specified by user
            n = 1 << im.encoderinfo["bits"]

        else:

            # check palette contents
            n = 256  # FIXME

        if n <= 2:
            bits = 1
        elif n <= 4:
            bits = 2
        elif n <= 16:
            bits = 4
        else:
            bits = 8

        if bits != 8:
            mode = "%s;%d" % (mode, bits)

    # encoder options
    if im.encoderinfo.has_key("dictionary"):
        dictionary = im.encoderinfo["dictionary"]
    else:
        dictionary = ""

    im.encoderconfig = (im.encoderinfo.has_key("optimize"), dictionary)

    # get the corresponding PNG mode
    try:
        rawmode, mode = _OUTMODES[mode]
    except KeyError:
        raise IOError, "cannot write mode %s as PNG" % mode

    #
    # write minimal PNG file

    fp.write(_MAGIC)

    chunk(
        fp,
        "IHDR",
        o32(im.size[0]),
        o32(im.size[1]),  #  0: size
        mode,  #  8: depth/type
        chr(0),  # 10: compression
        chr(0),  # 11: filter category
        chr(0))  # 12: interlace flag

    if im.mode == "P":
        chunk(fp, "PLTE", im.im.getpalette("RGB"))

    if 0:
        # FIXME: to be supported some day
        chunk(fp, "gAMA", o32(int(gamma * 100000.0)))

    ImageFileH._save(im, _idat(fp, chunk),
                     [("zip", (0, 0) + im.size, 0, rawmode)])

    chunk(fp, "IEND", "")

    try:
        fp.flush()
    except:
        pass