From Dirk.Engelmann@iwr.uni-heidelberg.de Tue Sep 2 22:23:56 1997 From: Dirk.Engelmann@iwr.uni-heidelberg.de (Dirk Engelmann) Date: Tue, 2 Sep 1997 23:23:56 +0200 (MET DST) Subject: [IMAGE-SIG] image sequnece in one Tk-window ? Message-ID: Hi! Is there a way to display images in one single Tk-window with pil ? Or is there another way except pil to manage it ? I would like to display an image sequence. Probably it could be done with player.py ? But I don't know how to use it (i.e. the ARG animation scripts). If you have some help or references, please let me know. Thanks! Cheers/ Dirk Engelmann Dirk.Engelmann@iwr.uni-heidelberg.de _______________ IMAGE-SIG - SIG on Image Processing with Python send messages to: image-sig@python.org administrivia to: image-sig-request@python.org _______________ From fredrik.lundh@image.combitech.se Wed Sep 3 09:49:53 1997 From: fredrik.lundh@image.combitech.se (Fredrik Lundh) Date: Wed, 3 Sep 1997 10:49:53 +0200 Subject: [IMAGE-SIG] image sequnece in one Tk-window ? Message-ID: <9709030841.AA15588@arnold.image.ivab.se> >Is there a way to display images in one single >Tk-window with pil ? Or is there another way >except pil to manage it ? 1. Create an ImageTk.PhotoImage object (typically from the image you want to display) 2. Display it as usual in a label or on a canvas. 3. To update what's displayed, paste the new contents into the PhotoImage object, and call update_idletasks on the widget (if you don't call update_idletasks, the widget is updated when Tk finds the time). For information on how to read sequence formats (GIF, FLI, TIFF, etc), see the handbook, available at: http://www.pythonware.com/technology.htm Cheers /F _______________ IMAGE-SIG - SIG on Image Processing with Python send messages to: image-sig@python.org administrivia to: image-sig-request@python.org _______________ From Dirk.Engelmann@iwr.uni-heidelberg.de Thu Sep 4 12:06:50 1997 From: Dirk.Engelmann@iwr.uni-heidelberg.de (Dirk Engelmann) Date: Thu, 4 Sep 1997 13:06:50 +0200 (MET DST) Subject: [IMAGE-SIG] fast image data access ? Message-ID: Hi! I would like to access image data fro Numerical Python. Is the only way to do this fromstring and tostring ? (im.fromstring(data.tostring()) ) This seems to me not very effficient. Is there another way ? Thanks for help! Cheers, Dirk Engelmann _______________ IMAGE-SIG - SIG on Image Processing with Python send messages to: image-sig@python.org administrivia to: image-sig-request@python.org _______________ From gregc@cgl.ucsf.EDU Sat Sep 6 02:05:48 1997 From: gregc@cgl.ucsf.EDU (gregc@cgl.ucsf.EDU) Date: Fri, 5 Sep 1997 18:05:48 -0700 Subject: [IMAGE-SIG] bug fix for 0.3a1 on SGI with -n32 Message-ID: <199709060105.SAA22139@pascal.ucsf.EDU> There seems to be a bug in the SGI 7.1 -n32 compiler that breaks pasting of images with alpha. Enclosed are the context diffs to libImaging/Paste.c. Greg Couch gregc@cgl.ucsf.edu ---- =================================================================== RCS file: RCS/Paste.c,v retrieving revision 1.1 diff -c -r1.1 Paste.c *** 1.1 1997/09/06 00:18:29 --- Paste.c 1997/09/06 00:55:04 *************** *** 20,27 **** #define MULDIV255(a, b, tmp)\ (tmp = (a) * (b) + 128, (((tmp >> 8) + tmp) >> 8)) ! #define BLEND(mask, in1, in2, tmp)\ ! MULDIV255(in1, 255 - mask, tmp) + MULDIV255(in2, mask, tmp) #define COMPOSE(mask, in1, in2, tmp)\ MULDIV255(in1, 255 - mask, tmp) + in2 --- 20,27 ---- #define MULDIV255(a, b, tmp)\ (tmp = (a) * (b) + 128, (((tmp >> 8) + tmp) >> 8)) ! #define BLEND(mask, in1, in2, tmp, tmp2)\ ! MULDIV255(in1, 255 - mask, tmp) + MULDIV255(in2, mask, tmp2) #define COMPOSE(mask, in1, in2, tmp)\ MULDIV255(in1, 255 - mask, tmp) + in2 *************** *** 48,54 **** ImagingPaste(Imaging imOut, Imaging imIn, Imaging imMask, int x0, int y0, int x1, int y1) { ! int x, y, i, tmp; int xm; int xx; int xsize, ysize; --- 48,54 ---- ImagingPaste(Imaging imOut, Imaging imIn, Imaging imMask, int x0, int y0, int x1, int y1) { ! int x, y, i, tmp, tmp2; int xm; int xx; int xsize, ysize; *************** *** 104,115 **** } else if (strcmp(imMask->mode, "L") == 0) { /* "L" (8-bit) alpha layer. */ ! PASTEMASK(BLEND(mask[xm], out[xx+i], in[xx+i], tmp), 1); } else if (strcmp(imMask->mode, "RGBA") == 0) { /* "A" alpha layer from "RGBA" image. */ ! PASTEMASK(BLEND(mask[xm], out[xx+i], in[xx+i], tmp), 4); } else if (strcmp(imMask->mode, "RGBa") == 0) { --- 104,115 ---- } else if (strcmp(imMask->mode, "L") == 0) { /* "L" (8-bit) alpha layer. */ ! PASTEMASK(BLEND(mask[xm], out[xx+i], in[xx+i], tmp, tmp2), 1); } else if (strcmp(imMask->mode, "RGBA") == 0) { /* "A" alpha layer from "RGBA" image. */ ! PASTEMASK(BLEND(mask[xm], out[xx+i], in[xx+i], tmp, tmp2), 4); } else if (strcmp(imMask->mode, "RGBa") == 0) { _______________ IMAGE-SIG - SIG on Image Processing with Python send messages to: image-sig@python.org administrivia to: image-sig-request@python.org _______________ From gregc@cgl.ucsf.EDU Sat Sep 6 02:10:37 1997 From: gregc@cgl.ucsf.EDU (gregc@cgl.ucsf.EDU) Date: Fri, 5 Sep 1997 18:10:37 -0700 Subject: [IMAGE-SIG] bug fix for Imaging-0.3a1 and Tk 8.0 final Message-ID: <199709060110.SAA22163@pascal.ucsf.EDU> Enclosed is the simple modification to Tk/tkImaging.c to make it work with Tk 8.0 final. Greg Couch gregc@cgl.ucsf.edu ----- =================================================================== RCS file: RCS/tkImaging.c,v retrieving revision 1.1 diff -c -r1.1 tkImaging.c *** 1.1 1997/09/05 22:03:24 --- tkImaging.c 1997/09/05 22:03:32 *************** *** 70,76 **** } /* get Tcl PhotoImage handle */ ! photo = Tk_FindPhoto(argv[1]); if (photo == NULL) { Tcl_AppendResult(interp, "destination photo must exist", (char *) NULL); return TCL_ERROR; --- 70,76 ---- } /* get Tcl PhotoImage handle */ ! photo = Tk_FindPhoto(interp, argv[1]); if (photo == NULL) { Tcl_AppendResult(interp, "destination photo must exist", (char *) NULL); return TCL_ERROR; _______________ IMAGE-SIG - SIG on Image Processing with Python send messages to: image-sig@python.org administrivia to: image-sig-request@python.org _______________ From gregc@cgl.ucsf.EDU Sat Sep 6 02:17:59 1997 From: gregc@cgl.ucsf.EDU (gregc@cgl.ucsf.EDU) Date: Fri, 5 Sep 1997 18:17:59 -0700 Subject: [IMAGE-SIG] declaration fixes for Imaging-0.3a1 Message-ID: <199709060117.SAA22219@pascal.ucsf.EDU> These fixes are not necessary, but stop various compiler warnings (type mismatches, statements with "null effects"). I also included modifications for the jpeg 6a library. Greg Couch gregc@cgl.ucsf.edu ----- =================================================================== RCS file: RCS/_imagingmodule.c,v retrieving revision 1.1 diff -c -r1.1 _imagingmodule.c *** 1.1 1997/09/05 21:33:43 --- _imagingmodule.c 1997/09/05 21:36:07 *************** *** 828,835 **** static PyObject* _getprojection(ImagingObject* self, PyObject* args) { ! char* xprofile; ! char* yprofile; PyObject* result; xprofile = malloc(self->image->xsize); --- 828,835 ---- static PyObject* _getprojection(ImagingObject* self, PyObject* args) { ! UINT8* xprofile; ! UINT8* yprofile; PyObject* result; xprofile = malloc(self->image->xsize); *************** *** 1234,1240 **** static PyObject* _crc32(PyObject* self, PyObject* args) { ! char* buffer; int bytes; int hi, lo; UINT32 crc; --- 1234,1240 ---- static PyObject* _crc32(PyObject* self, PyObject* args) { ! UINT8* buffer; int bytes; int hi, lo; UINT32 crc; =================================================================== RCS file: libImaging/RCS/JpegDecode.c,v retrieving revision 1.1 diff -c -r1.1 libImaging/JpegDecode.c *** 1.1 1997/09/05 21:05:32 --- libImaging/JpegDecode.c 1997/09/05 21:06:10 *************** *** 33,45 **** /* Suspending input handler */ /* -------------------------------------------------------------------- */ ! METHODDEF void stub(j_decompress_ptr cinfo) { /* empty */ } ! METHODDEF boolean fill_input_buffer(j_decompress_ptr cinfo) { /* Suspension */ --- 33,45 ---- /* Suspending input handler */ /* -------------------------------------------------------------------- */ ! METHODDEF(void) stub(j_decompress_ptr cinfo) { /* empty */ } ! METHODDEF(boolean) fill_input_buffer(j_decompress_ptr cinfo) { /* Suspension */ *************** *** 46,52 **** return FALSE; } ! METHODDEF void skip_input_data(j_decompress_ptr cinfo, long num_bytes) { JPEGSOURCE* source = (JPEGSOURCE*) cinfo->src; --- 46,52 ---- return FALSE; } ! METHODDEF(void) skip_input_data(j_decompress_ptr cinfo, long num_bytes) { JPEGSOURCE* source = (JPEGSOURCE*) cinfo->src; *************** *** 66,72 **** } ! GLOBAL void jpeg_buffer_src(j_decompress_ptr cinfo, JPEGSOURCE* source) { cinfo->src = (void*) source; --- 66,72 ---- } ! GLOBAL(void) jpeg_buffer_src(j_decompress_ptr cinfo, JPEGSOURCE* source) { cinfo->src = (void*) source; *************** *** 87,93 **** /* Error handler */ /* -------------------------------------------------------------------- */ ! METHODDEF void error(j_common_ptr cinfo) { JPEGERROR* error; --- 87,93 ---- /* Error handler */ /* -------------------------------------------------------------------- */ ! METHODDEF(void) error(j_common_ptr cinfo) { JPEGERROR* error; =================================================================== RCS file: libImaging/RCS/JpegEncode.c,v retrieving revision 1.1 diff -c -r1.1 libImaging/JpegEncode.c *** 1.1 1997/09/05 21:05:39 --- libImaging/JpegEncode.c 1997/09/05 21:06:28 *************** *** 32,44 **** /* Suspending output handler */ /* -------------------------------------------------------------------- */ ! METHODDEF void stub(j_compress_ptr cinfo) { /* empty */ } ! METHODDEF boolean empty_output_buffer (j_compress_ptr cinfo) { /* Suspension */ --- 32,44 ---- /* Suspending output handler */ /* -------------------------------------------------------------------- */ ! METHODDEF(void) stub(j_compress_ptr cinfo) { /* empty */ } ! METHODDEF(boolean) empty_output_buffer (j_compress_ptr cinfo) { /* Suspension */ *************** *** 45,51 **** return FALSE; } ! GLOBAL void jpeg_buffer_dest(j_compress_ptr cinfo, JPEGDESTINATION* destination) { cinfo->dest = (void*) destination; --- 45,51 ---- return FALSE; } ! GLOBAL(void) jpeg_buffer_dest(j_compress_ptr cinfo, JPEGDESTINATION* destination) { cinfo->dest = (void*) destination; *************** *** 60,66 **** /* Error handler */ /* -------------------------------------------------------------------- */ ! METHODDEF void error(j_common_ptr cinfo) { JPEGERROR* error; --- 60,66 ---- /* Error handler */ /* -------------------------------------------------------------------- */ ! METHODDEF(void) error(j_common_ptr cinfo) { JPEGERROR* error; =================================================================== RCS file: libImaging/RCS/Draw.c,v retrieving revision 1.1 diff -c -r1.1 libImaging/Draw.c *** 1.1 1997/09/05 21:06:52 --- libImaging/Draw.c 1997/09/05 21:07:23 *************** *** 146,154 **** } static int ! _cmp(const float *y0, const float *y1) { ! return y0[0] - y1[0]; } static inline void --- 146,154 ---- } static int ! _cmp(const void *y0, const void *y1) { ! return ((const float *) y0)[0] - ((const float *) y1)[0]; } static inline void =================================================================== RCS file: libImaging/RCS/BitDecode.c,v retrieving revision 1.1 diff -c -r1.1 libImaging/BitDecode.c *** 1.1 1997/09/05 21:12:33 --- libImaging/BitDecode.c 1997/09/05 21:12:50 *************** *** 28,40 **** /* this decoder only works for float32 image buffers */ if (im->type != 2) { ! state->errcode == IMAGING_CODEC_CONFIG; return -1; } /* sanity check */ if (bitstate->bits < 1 || bitstate->bits >= 32) { ! state->errcode == IMAGING_CODEC_CONFIG; return -1; } --- 28,40 ---- /* this decoder only works for float32 image buffers */ if (im->type != 2) { ! state->errcode = IMAGING_CODEC_CONFIG; return -1; } /* sanity check */ if (bitstate->bits < 1 || bitstate->bits >= 32) { ! state->errcode = IMAGING_CODEC_CONFIG; return -1; } =================================================================== RCS file: libImaging/RCS/ZipEncode.c,v retrieving revision 1.1 diff -c -r1.1 libImaging/ZipEncode.c *** 1.1 1997/09/05 21:12:33 --- libImaging/ZipEncode.c 1997/09/05 21:12:54 *************** *** 79,85 **** (context->mode == ZIP_PNG) ? Z_FILTERED : Z_DEFAULT_STRATEGY); if (err < 0) { ! state->errcode == IMAGING_CODEC_CONFIG; return -1; } --- 79,85 ---- (context->mode == ZIP_PNG) ? Z_FILTERED : Z_DEFAULT_STRATEGY); if (err < 0) { ! state->errcode = IMAGING_CODEC_CONFIG; return -1; } *************** *** 87,93 **** err = deflateSetDictionary(&context->z_stream, context->dictionary, context->dictionary_size); if (err < 0) { ! state->errcode == IMAGING_CODEC_CONFIG; return -1; } } --- 87,93 ---- err = deflateSetDictionary(&context->z_stream, context->dictionary, context->dictionary_size); if (err < 0) { ! state->errcode = IMAGING_CODEC_CONFIG; return -1; } } =================================================================== RCS file: libImaging/RCS/Zip.h,v retrieving revision 1.1 diff -c -r1.1 libImaging/Zip.h *** 1.1 1997/09/05 21:15:55 --- libImaging/Zip.h 1997/09/05 21:17:39 *************** *** 1,6 **** /* * The Python Imaging Library. ! * $Id: Zip.h,v 1.1 1997/09/05 21:15:55 gregc Exp gregc $ * * declarations for the ZIP codecs * --- 1,6 ---- /* * The Python Imaging Library. ! * $Id: Zip.h,v 1.2 1997/06/01 18:07:43 fl Exp $ * * declarations for the ZIP codecs * *************** *** 29,35 **** int optimize; /* Predefined dictionary (experimental) */ ! char* dictionary; int dictionary_size; /* PRIVATE CONTEXT (set by decoder/encoder) */ --- 29,35 ---- int optimize; /* Predefined dictionary (experimental) */ ! Bytef *dictionary; int dictionary_size; /* PRIVATE CONTEXT (set by decoder/encoder) */ =================================================================== RCS file: libImaging/RCS/Quantize.c,v retrieving revision 1.1 diff -c -r1.1 libImaging/Quantize.c *** 1.1 1997/09/05 21:19:32 --- libImaging/Quantize.c 1997/09/05 21:20:52 *************** *** 184,190 **** } else if (strcmp(imIn->mode, "P") == 0 && imIn->palette && strcmp(imIn->palette->mode, "RGB") == 0) { /* Palette image */ ! char* p = imIn->palette->palette; for (y = 0; y < imIn->ysize; y++) { UINT8* in = imIn->image8[y]; for (x = 0; x < imIn->xsize; x++) { --- 184,190 ---- } else if (strcmp(imIn->mode, "P") == 0 && imIn->palette && strcmp(imIn->palette->mode, "RGB") == 0) { /* Palette image */ ! UINT8* p = imIn->palette->palette; for (y = 0; y < imIn->ysize; y++) { UINT8* in = imIn->image8[y]; for (x = 0; x < imIn->xsize; x++) { _______________ IMAGE-SIG - SIG on Image Processing with Python send messages to: image-sig@python.org administrivia to: image-sig-request@python.org _______________ From gregc@cgl.ucsf.EDU Sat Sep 6 07:53:27 1997 From: gregc@cgl.ucsf.EDU (gregc@cgl.ucsf.EDU) Date: Fri, 5 Sep 1997 23:53:27 -0700 Subject: [IMAGE-SIG] mods to TiffImagePlugin.py in Imaging-0.3a1 Message-ID: <199709060653.XAA22767@pascal.ucsf.EDU> I have a RGBA tiff file with no RowsPerStrip tag but a StripOffsets tag. The enclosed diff to TiffImagePlugin.py allows the file to be read. The resulting image seems to be correct so I'm happy. Greg Couch gregc@cgl.ucsf.edu ----- =================================================================== RCS file: RCS/TiffImagePlugin.py,v retrieving revision 1.1 diff -c -r1.1 TiffImagePlugin.py *** 1.1 1997/09/06 06:15:42 --- TiffImagePlugin.py 1997/09/06 06:48:41 *************** *** 196,202 **** self.tile = [] if self.tag.has_key(273): # striped image ! h = self.tag[278][0] w = self.size[0] a = None for o in self.tag[273]: --- 196,205 ---- self.tile = [] if self.tag.has_key(273): # striped image ! if self.tag.has_key(278): ! h = self.tag[278][0] ! else: ! h = self.size[1] w = self.size[0] a = None for o in self.tag[273]: _______________ IMAGE-SIG - SIG on Image Processing with Python send messages to: image-sig@python.org administrivia to: image-sig-request@python.org _______________ From Dirk.Engelmann@iwr.uni-heidelberg.de Wed Sep 10 15:21:53 1997 From: Dirk.Engelmann@iwr.uni-heidelberg.de (Dirk Engelmann) Date: Wed, 10 Sep 1997 16:21:53 +0200 (MET DST) Subject: [IMAGE-SIG] Float image ? Message-ID: Hi! Is there a way to display a float Image ? If not, how could I convert a float image to an integer ? Thanks for help! best regards, Dirk Engelmann _______________ IMAGE-SIG - SIG on Image Processing with Python send messages to: image-sig@python.org administrivia to: image-sig-request@python.org _______________ From fredrik.lundh@image.combitech.se Wed Sep 10 18:49:57 1997 From: fredrik.lundh@image.combitech.se (Fredrik Lundh) Date: Wed, 10 Sep 1997 19:49:57 +0200 Subject: [IMAGE-SIG] Float image ? Message-ID: <9709101749.AA15406@arnold.image.ivab.se> >Is there a way to display a float Image ? If we're talking Tkinter (ImageTk), just do as usual. PIL will automatically convert the floating point image to a greyscale image (mode "L"). Values outside the range 0-255 are clipped. You can rescale the floating point image via point method, using the following syntax: imOut = imIn.point(lambda v: v*scale+offset) If imIn is a floating point image, the argument *must* be a lambda expression, having the format described above. convert("L") also works on floating point images. Cheers /F _______________ IMAGE-SIG - SIG on Image Processing with Python send messages to: image-sig@python.org administrivia to: image-sig-request@python.org _______________ From rhaight@accn.org Mon Sep 15 20:29:24 1997 From: rhaight@accn.org (Richard C. Haight) Date: Mon, 15 Sep 1997 15:29:24 -0400 Subject: [IMAGE-SIG] for Mac Message-ID: <341D8C94.14C7343D@mail.accn.org> Is there any chance of getting a pre-built Mac version of your imaging lib? Richard Haight _______________ IMAGE-SIG - SIG on Image Processing with Python send messages to: image-sig@python.org administrivia to: image-sig-request@python.org _______________ From fredrik.lundh@image.combitech.se Mon Sep 15 22:28:51 1997 From: fredrik.lundh@image.combitech.se (Fredrik Lundh) Date: Mon, 15 Sep 1997 23:28:51 +0200 Subject: [IMAGE-SIG] for Mac In-Reply-To: <341D8C94.14C7343D@mail.accn.org> (rhaight@accn.org) Message-ID: <9709152128.AA02798@arnold.image.ivab.se> > Is there any chance of getting a pre-built Mac version of your > imaging lib? Yes, thanks to Jack Janssen. You can grab it from: ftp://ftp.cwi.nl/pub/jack/python/mac/ Cheers /F _______________ IMAGE-SIG - SIG on Image Processing with Python send messages to: image-sig@python.org administrivia to: image-sig-request@python.org _______________ From emlist@braznet.com.br Wed Sep 17 13:47:52 1997 From: emlist@braznet.com.br (E.M.L.) Date: Wed, 17 Sep 1997 09:47:52 -0300 Subject: [IMAGE-SIG] fstobdf and/or pil fonts References: <33F2E90E.1A9F@smhi.se> Message-ID: <341FD177.167EB0E7@braznet.com.br> Hello, i intend to use PIL for some web applications on our site, however i havent been lucky to find any place that could possibly have the fstobdf converter. since we run on BSD and apparently fstobdf is not native on this plataform i would like to know if anyone could send me the fstobdf or inform me where to find it, or, send me some pil fonts to make some tests. kindest regards. Paulo B. Bloedorn Webmaster Braznet Brazilian Network _______________ IMAGE-SIG - SIG on Image Processing with Python send messages to: image-sig@python.org administrivia to: image-sig-request@python.org _______________ From Daniel.Michelson@smhi.se Wed Sep 17 14:33:03 1997 From: Daniel.Michelson@smhi.se (Daniel Michelson) Date: Wed, 17 Sep 1997 15:33:03 +0200 Subject: [IMAGE-SIG] fstobdf and/or pil fonts References: <33F2E90E.1A9F@smhi.se> <341FD177.167EB0E7@braznet.com.br> Message-ID: <341FDC0F.7DE1@smhi.se> This is a multi-part message in MIME format. --------------4487620152BF Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable Hej, > i intend to use PIL for some web applications on our site, however > i havent been lucky to find any place that could possibly have the > fstobdf converter. > since we run on BSD and apparently fstobdf is not native on this > plataform i would like to know if anyone could send me the fstobdf or > inform me where to find it, or, send me some pil fonts to make some > tests. I don't have the fstobdf code but we do have the program. I've had some problems using it but we have a few bdf files on our Suns, so I've chosen a couple and converted them to pil fonts. I've included them here as attachments. Hope you can make something out of them. best wishes, -d +------------------+--------------------------------------------------+ | | Daniel B. Michelson | | /\ |\ /| | | | | Swedish Meteorological and Hydrological Institute| | \ | \/ | |__| | | S-601 76 Norrk=F6ping, Sweden |= | \ | | | | | | Telephone: +46 11 - 15 84 94 | | \/ | | | | | | Telefax: +46 11 - 17 02 07 | | | Internet: Daniel.Michelson@smhi.se | +------------------+--------------------------------------------------+ --------------4487620152BF Content-Type: application/octet-stream; name="lubB14.pil" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="lubB14.pil" UElMZm9udApCJkg7THVjaWRhQnJpZ2h0O0RlbWlCb2xkO1JvbWFuO05vcm1hbDs7MjA7MTQw OzEwMDsxMDA7UHJvcG9ydGlvbmFsOzExODtJU084ODU5OzEKREFUQQoAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAABEAAQASAAAAAAABAAEA BQAAAAEAAwAEABIAAQAAAAQADwAJAAAAAQADAAgACQAEAAAACwAGAA0AAAABAAMADQASAAsA AAAXAA8ADAAAAAIAAgALABQAFwAAACAAEgAPAAAAAAADAA8AEgAgAAAALwAPAA8AAAABAAMA DwASAC8AAAA9AA8ABQAAAAEAAwAEAAkAPQAAAEAABgAHAAAAAQADAAYAFgBAAAAARQATAAcA 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 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAABAAcABAAWA/QAAAP3AA8ADAAAAAEAAwAKABID 9wAABAAADwAMAAAAAgADAAsAEgQAAAAECQAPAAwAAAAAAAQADQARBAkAAAQWAA0ADAAAAAAA AwANABIEFgAABCMADwAFAAAAAgADAAMAFQQjAAAEJAASAAwAAAACAAMACwAWBCQAAAQtABMA DAAAAAMAAwAJAAUELQAABDMAAgARAAAAAQADABEAEgQzAAAEQwAPAAoAAAABAAMACgALBEMA AARMAAgACwAAAAAACAAKABEETAAABFYACQAMAAAAAAAJAAwADwRWAAAEYgAGAAYAAAAAAAoA BQAMBGIAAARnAAIADAAAAAIAAwALAA0EZwAABHAACgAMAAAAAwADAAkABARwAAAEdgABAAUA AAABAAMABAAHBHYAAAR5AAQADAAAAAEABQAMABIEeQAABIQADQAHAAD/9QAD//sADASEAAAE igAJAAcAAP/0AAP/+gAMBIoAAASQAAkADAAAAAQAAwAJAAYEkAAABJUAAwAOAAAAAAAHAA4A FQSVAAAEowAOAAwAAAABAAMACQAVBKMAAASrABIADAAAAAUACgAHAA0EqwAABK0AAwAMAAAA BQARAAgAFgStAAAEsAAFAAcAAP/0AAP/+gAMBLAAAAS2AAkACgAAAAAAAwAJAAsEtgAABL8A CAALAAAAAQAIAAsAEQS/AAAEyQAJABAAAAADAAMAEgASBMkAAATYAA8AEAAAAAMAAwARABIE 2AAABOYADwAQAAAAAwADABIAEgTmAAAE9QAPAAoAAAABAAcACgAWBPUAAAT+AA8AEAAAAAD/ /wAQABIE/gAABQ4AEwAQAAAAAP//ABAAEgUOAAAFHgATABAAAAAA//8AEAASBR4AAAUuABMA EAAAAAD//wAQABIFLgAABT4AEwAQAAAAAAAAABAAEgU+AAAFTgASABAAAAAA//8AEAASBU4A AAVeABMAEwAAAAAAAwATABIFXgAABXEADwAOAAAAAQADAA4AFgVxAAAFfgATAAwAAAAA//8A DAASBX4AAAWKABMADAAAAAD//wAMABIFigAABZYAEwAMAAAAAP//AAwAEgWWAAAFogATAAwA AAAAAAAADAASBaIAAAWuABIABwAAAAD//wAHABIFrgAABbUAEwAHAAAAAP//AAcAEgW1AAAF vAATAAcAAAAA//8ABwASBbwAAAXDABMABwAAAAAAAAAHABIFwwAABcoAEgAQAAAAAAADAA8A EgXKAAAF2QAPABAAAAAA//8ADwASBdkAAAXoABMAEAAAAAH//wAQABIF6AAABfcAEwAQAAAA Af//ABAAEgX3AAAGBgATABAAAAAB//8AEAASBgYAAAYVABMAEAAAAAH//wAQABIGFQAABiQA EwAQAAAAAQAAABAAEgYkAAAGMwASAAwAAAAAAAUADAASBjMAAAY/AA0AEAAAAAEAAwAQABIG PwAABk4ADwAPAAAAAP//AA8AEgZOAAAGXQATAA8AAAAA//8ADwASBl0AAAZsABMADwAAAAD/ /wAPABIGbAAABnsAEwAPAAAAAAAAAA8AEgZ7AAAGigASAA4AAAAA//8ADwASBooAAAaZABMA DAAAAAAAAwAMABIGmQAABqUADwAOAAAAAQADAA4AEgalAAAGsgAPAAsAAAABAAMACwASBrIA AAa8AA8ACwAAAAEAAwALABIGvAAABsYADwALAAAAAQADAAsAEgbGAAAG0AAPAAsAAAABAAMA CwASBtAAAAbaAA8ACwAAAAEABAALABIG2gAABuQADgALAAAAAQADAAsAEgbkAAAG7gAPABEA AAAAAAcAEAASBu4AAAb+AAsACwAAAAEABwAKABYG/gAABwcADwALAAAAAAADAAoAEgcHAAAH EQAPAAsAAAAAAAMACgASBxEAAAcbAA8ACwAAAAAAAwAKABIHGwAAByUADwALAAAAAAAEAAoA EgclAAAHLwAOAAcAAAAAAAMABwASBy8AAAc2AA8ABwAAAAAAAwAHABIHNgAABz0ADwAHAAAA AAADAAcAEgc9AAAHRAAPAAcAAAAAAAQABwASB0QAAAdLAA4ADQAAAAEAAgAMABIHSwAAB1YA EAANAAAAAAADAA4AEgdWAAAHZAAPAAwAAAABAAMADAASB2QAAAdvAA8ADAAAAAEAAwAMABIH bwAAB3oADwAMAAAAAQADAAwAEgd6AAAHhQAPAAwAAAABAAMADAASB4UAAAeQAA8ADAAAAAEA BAAMABIHkAAAB5sADgAMAAAAAAAHAAwAEgebAAAHpwALAAwAAAAAAAcADQASB6cAAAe0AAsA DQAAAAAAAwAOABIHtAAAB8IADwANAAAAAAADAA4AEgfCAAAH0AAPAA0AAAAAAAMADgASB9AA AAfeAA8ADQAAAAAABAAOABIH3gAAB+wADgANAAAAAAADAA0AFgfsAAAH+QATAA0AAAAAAAQA DQAWB/kAAAgGABIADQAAAAAABAANABYIBgAACBMAEg== --------------4487620152BF Content-Type: application/octet-stream; name="lubB18.pil" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="lubB18.pil" UElMZm9udApCJkg7THVjaWRhQnJpZ2h0O0RlbWlCb2xkO1JvbWFuO05vcm1hbDs7MjU7MTgw OzEwMDsxMDA7UHJvcG9ydGlvbmFsOzE0OTtJU084ODU5OzEKREFUQQoAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAABYAAQAXAAAAAAABAAEA BgAAAAEABQAFABcAAQAAAAUAEgAMAAAAAQAEAAoACwAFAAAADgAHABEAAAAAAAUAEAAXAA4A AAAeABIAEAAAAAIABAAOABoAHgAAACoAFgATAAAAAAAFABMAFwAqAAAAPQASABMAAAABAAUA EwAXAD0AAABPABIABwAAAAEABAAFAAwATwAAAFMACAAIAAAAAQAEAAgAGwBTAAAAWgAXAAgA AAABAAQACAAbAFoAAABhABcACwAAAAEABQALAA4AYQAAAGsACQAQAAAAAQAIAA8AFwBrAAAA eQAPAAcAAAABABMABQAbAHkAAAB9AAgAEAAAAAEADwAPABEAfQAAAIsAAgAHAAAAAQATAAUA FwCLAAAAjwAEAA0AAAAAAAQADQAbAI8AAACcABcAEAAAAAEABQAPABcAnAAAAKoAEgAQAAAA AwAFAA0AFwCqAAAAtAASABAAAAABAAUADQAXALQAAADAABIAEAAAAAIABQAOABcAwAAAAMwA EgAQAAAAAAAFAA8AFwDMAAAA2wASABAAAAADAAUADgAXANsAAADmABIAEAAAAAEABQAPABcA 5gAAAPQAEgAQAAAAAwAFAA8AFwD0AAABAAASABAAAAABAAUADgAXAQAAAAENABIAEAAAAAEA BQAPABcBDQAAARsAEgAGAAAAAQAKAAUAFwEbAAABHwANAAYAAAABAAoABQAbAR8AAAEjABEA EAAAAAEACAAPABcBIwAAATEADwAQAAAAAQANAA8AEwExAAABPwAGABAAAAABAAgADwAXAT8A AAFNAA8ADQAAAAAABQAMABcBTQAAAVkAEgAWAAAAAgAFABUAFwFZAAABbAASABQAAAAAAAUA FAAXAWwAAAGAABIAEAAAAAEABQAPABcBgAAAAY4AEgASAAAAAQAFABEAFwGOAAABngASABQA AAABAAUAEwAXAZ4AAAGwABIADwAAAAEABQAOABcBsAAAAb0AEgAPAAAAAQAFAA4AFwG9AAAB ygASABMAAAABAAUAEwAXAcoAAAHcABIAFAAAAAAABQATABcB3AAAAe8AEgAJAAAAAAAFAAgA FwHvAAAB9wASAAsAAAAAAAUACwAbAfcAAAICABYAEwAAAAEABQATABcCAgAAAhQAEgAPAAAA AAAFAA4AFwIUAAACIgASABcAAAAAAAUAFgAXAiIAAAI4ABIAFAAAAAEABQATABcCOAAAAkoA EgAUAAAAAQAFABMAFwJKAAACXAASAA8AAAABAAUADwAXAlwAAAJqABIAFAAAAAEABQAWABsC agAAAn8AFgASAAAAAQAFABIAFwJ/AAACkAASAA4AAAABAAUADQAXApAAAAKcABIAEgAAAAAA BQASABcCnAAAAq4AEgATAAAAAAAFABIAFwKuAAACwAASABMAAAAAAAUAEwAXAsAAAALTABIA GAAAAAAABQAYABcC0wAAAusAEgASAAAAAAAFABIAFwLrAAAC/QASABIAAAAAAAUAEgAXAv0A AAMPABIAEAAAAAEABQAOABcDDwAAAxwAEgAIAAAAAQAEAAgAGwMcAAADIwAXAA0AAAAAAAQA DQAbAyMAAAMwABcACAAAAAAABAAHABsDMAAAAzcAFwAQAAAAAQAFAA8AFAM3AAADRQAPAAwA AAABABgACwAaA0UAAANPAAIABwAAAAEABAAFAAwDTwAAA1MACAAOAAAAAAAKAA4AFwNTAAAD YQANABAAAAAAAAQADwAXA2EAAANwABMADgAAAAEACgAMABcDcAAAA3sADQAQAAAAAQAEABAA FwN7AAADigATAA4AAAABAAoADQAXA4oAAAOWAA0ACgAAAAAABAALABcDlgAAA6EAEwAPAAAA AQAKAA8AHAOhAAADrwASABAAAAAAAAQAEAAXA68AAAO/ABMACAAAAAAABAAIABcDvwAAA8cA EwAJAAAAAAAEAAgAHAPHAAADzwAYAA8AAAAAAAQAEAAXA88AAAPfABMACAAAAAAABAAIABcD 3wAAA+cAEwAYAAAAAAAKABgAFwPnAAAD/wANABAAAAAAAAoAEAAXA/8AAAQPAA0ADwAAAAEA CgAPABcEDwAABB0ADQAQAAAAAAAKAA8AHAQdAAAELAASABAAAAABAAoAEAAcBCwAAAQ7ABIA DAAAAAAACgALABcEOwAABEYADQANAAAAAQAKAAwAFwRGAAAEUQANAAoAAAAAAAYACQAXBFEA AARaABEAEAAAAAAACgAQABcEWgAABGoADQAQAAAAAAAKABAAFwRqAAAEegANABYAAAAAAAoA FgAXBHoAAASQAA0ADwAAAAAACgAPABcEkAAABJ8ADQAQAAAAAAAKABAAHASfAAAErwASAA8A AAABAAoADQAXBK8AAAS7AA0ACQAAAAIABAAIABsEuwAABMEAFwAGAAAAAgAEAAQAGwTBAAAE wwAXAAkAAAABAAQABwAbBMMAAATJABcAEAAAAAEADQAPABMEyQAABNcABgAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAABAAoABQAcBNcAAATbABIAEAAAAAEABQANABcE 2wAABOcAEgAQAAAAAwAFAA4AFwTnAAAE8gASABAAAAAAAAYADwAWBPIAAAUBABAAEAAAAAAA BQAQABcFAQAABREAEgAGAAAAAgAEAAQAGwURAAAFEwAXABAAAAACAAUADgAcBRMAAAUfABcA DwAAAAQABQAMAAgFHwAABScAAwAVAAAAAQAFABQAFwUnAAAFOgASAAwAAAABAAUADAAPBToA AAVFAAoADgAAAAEACwANABYFRQAABVEACwAQAAAAAQANAA8AEwVRAAAFXwAGAAcAAAABAA4A BwARBV8AAAVlAAMAEAAAAAIABQAOABEFZQAABXEADAAPAAAABAAFAAwABwVxAAAFeQACAAYA AAABAAUABQAJBXkAAAV9AAQAEAAAAAEACAAPABcFfQAABYsADwAJAAD/8gAF//kAEAWLAAAF kgALAAkAAP/yAAX/+QAQBZIAAAWZAAsADwAAAAUABAALAAgFmQAABZ8ABAASAAAAAQAKABEA GwWfAAAFrwARABAAAAACAAUADAAbBa8AAAW5ABYAEAAAAAYADgAJABIFuQAABbwABAAPAAAA BgAXAAoAHAW8AAAFwAAFAAkAAP/xAAX/9wAQBcAAAAXGAAsADAAAAAEABQAMAA8FxgAABdEA CgAOAAAAAQALAA0AFgXRAAAF3QALABQAAAAFAAUAFwAXBd0AAAXvABIAFAAAAAUABQAXABcF 7wAABgEAEgAUAAAABQAFABcAFwYBAAAGEwASAA0AAAAAAAoADAAcBhMAAAYfABIAFAAAAAAA AAAUABcGHwAABjMAFwAUAAAAAAAAABQAFwYzAAAGRwAXABQAAAAAAAAAFAAXBkcAAAZbABcA FAAAAAAAAAAUABcGWwAABm8AFwAUAAAAAAABABQAFwZvAAAGgwAWABQAAAAAAAAAFAAXBoMA AAaXABcAGAAAAAAABQAXABcGlwAABq4AEgASAAAAAQAFABEAHAauAAAGvgAXAA8AAAABAAAA DgAXBr4AAAbLABcADwAAAAEAAAAOABcGywAABtgAFwAPAAAAAQAAAA4AFwbYAAAG5QAXAA8A AAABAAEADgAXBuUAAAbyABYACQAAAAAAAAAIABcG8gAABvoAFwAJAAAAAAAAAAgAFwb6AAAH AgAXAAkAAAABAAAACgAXBwIAAAcLABcACQAAAAAAAQAIABcHCwAABxMAFgAUAAAAAAAFABMA FwcTAAAHJgASABQAAAABAAAAEwAXByYAAAc4ABcAFAAAAAEAAAATABcHOAAAB0oAFwAUAAAA AQAAABMAFwdKAAAHXAAXABQAAAABAAAAEwAXB1wAAAduABcAFAAAAAEAAAATABcHbgAAB4AA FwAUAAAAAQABABMAFweAAAAHkgAWABAAAAABAAgADwAXB5IAAAegAA8AFAAAAAEABQATABcH oAAAB7IAEgATAAAAAAAAABIAFweyAAAHxAAXABMAAAAAAAAAEgAXB8QAAAfWABcAEwAAAAAA AAASABcH1gAAB+gAFwATAAAAAAABABIAFwfoAAAH+gAWABIAAAAAAAAAEgAXB/oAAAgMABcA DwAAAAEABQAPABcIDAAACBoAEgARAAAAAQAEABEAFwgaAAAIKgATAA4AAAAAAAUADgAXCCoA AAg4ABIADgAAAAAABQAOABcIOAAACEYAEgAOAAAAAAAFAA4AFwhGAAAIVAASAA4AAAAAAAUA DgAXCFQAAAhiABIADgAAAAAABgAOABcIYgAACHAAEQAOAAAAAAAFAA4AFwhwAAAIfgASABUA AAAAAAoAFAAXCH4AAAiSAA0ADgAAAAEACgAMABwIkgAACJ0AEgAOAAAAAQAFAA0AFwidAAAI qQASAA4AAAABAAUADQAXCKkAAAi1ABIADgAAAAEABQANABcItQAACMEAEgAOAAAAAQAGAA0A FwjBAAAIzQARAAgAAAAAAAUACAAXCM0AAAjVABIACAAAAAAABQAIABcI1QAACN0AEgAIAAAA AQAFAAoAFwjdAAAI5gASAAgAAAAAAAYACAAXCOYAAAjuABEAEAAAAAEAAwAPABcI7gAACPwA FAAQAAAAAAAFABAAFwj8AAAJDAASAA8AAAABAAUADwAXCQwAAAkaABIADwAAAAEABQAPABcJ GgAACSgAEgAPAAAAAQAFAA8AFwkoAAAJNgASAA8AAAABAAUADwAXCTYAAAlEABIADwAAAAEA BgAPABcJRAAACVIAEQAQAAAAAAAKAA8AFwlSAAAJYQANAA8AAAAAAAoAEAAXCWEAAAlxAA0A EAAAAAAABQAQABcJcQAACYEAEgAQAAAAAAAFABAAFwmBAAAJkQASABAAAAAAAAUAEAAXCZEA AAmhABIAEAAAAAAABgAQABcJoQAACbEAEQAQAAAAAAAFABAAHAmxAAAJwQAXABAAAAAAAAYA DwAcCcEAAAnQABYAEAAAAAAABgAQABwJ0AAACeAAFg== --------------4487620152BF-- _______________ IMAGE-SIG - SIG on Image Processing with Python send messages to: image-sig@python.org administrivia to: image-sig-request@python.org _______________ From fredrik.lundh@image.combitech.se Wed Sep 17 15:07:47 1997 From: fredrik.lundh@image.combitech.se (Fredrik Lundh) Date: Wed, 17 Sep 1997 16:07:47 +0200 Subject: [IMAGE-SIG] fstobdf and/or pil fonts In-Reply-To: <341FD177.167EB0E7@braznet.com.br> (emlist@braznet.com.br) Message-ID: <9709171407.AA11711@arnold.image.ivab.se> > I intend to use PIL for some web applications on our site, however i > havent been lucky to find any place that could possibly have the > fstobdf converter. since we run on BSD and apparently fstobdf is > not native on this plataform i would like to know if anyone could > send me the fstobdf or inform me where to find it, or, send me some > pil fonts to make some tests. fstobdf is part of the X window system distribution (it's in X11R5 and later, at least). These distributions also includes a bunch of BDF files that you can use directly: http://www.opengroup.org/tech/desktop/x/gettingx.htm If you don't want to download the ~30 MB X11 distribution, I managed to find an unpacked kit at the following site: http://www.funet.fi/pub/X11/XFree86/3.3/untarred/xc/fonts/bdf/ Cheers /F _______________ IMAGE-SIG - SIG on Image Processing with Python send messages to: image-sig@python.org administrivia to: image-sig-request@python.org _______________ From emlist@braznet.com.br Fri Sep 19 19:05:19 1997 From: emlist@braznet.com.br (E.M.L.) Date: Fri, 19 Sep 1997 15:05:19 -0300 Subject: [IMAGE-SIG] SETINK - font colors on stamped strings Message-ID: <3422BEDF.41C67EA6@braznet.com.br> I know my question might be obvious and so might be the answer, but what is the way to set the font color that will be stamped onto an image to, lets say, pure red? i have got to white, black and some weird colors with the setink function but i havent quite understood the one number color value. is there any literature about this matter? is there any other way to set the font color, ie. with palettes or something similar? i would greatly appreciate any help. kindest regards Paulo B. Bloedorn Braznet Brazilian Network _______________ IMAGE-SIG - SIG on Image Processing with Python send messages to: image-sig@python.org administrivia to: image-sig-request@python.org _______________ From emlist@braznet.com.br Fri Sep 19 20:36:13 1997 From: emlist@braznet.com.br (E.M.L.) Date: Fri, 19 Sep 1997 16:36:13 -0300 Subject: [IMAGE-SIG] Centering strings on an image Message-ID: <3422D42D.167EB0E7@braznet.com.br> We develop sites of a variety of utilities and the main reason i am migrating to python was due to the database and mathematical handlings. As commercial sites however depend a great part on the visual, there are a few things i would like need to know. - As in my earlier mail, is there a way to set the font colors of the string to be stamped onto an image? if yes, what is the logical behind the setink function? how do i set color like pure red, blue or even other complex colors or patterns? - Is there currently a way to center a string to be stamped onto an image? if not, any idea of how this could be done in the future? i guess these basical functions (if not implemented yet) would add two great tools for the day-a-day jobs with image processing. kindest regards paulo b. bloedorn Braznet Brazilian Network _______________ IMAGE-SIG - SIG on Image Processing with Python send messages to: image-sig@python.org administrivia to: image-sig-request@python.org _______________ From Daniel.Michelson@smhi.se Mon Sep 22 08:49:07 1997 From: Daniel.Michelson@smhi.se (Daniel Michelson) Date: Mon, 22 Sep 1997 09:49:07 +0200 Subject: [IMAGE-SIG] SETINK - font colors on stamped strings References: <3422BEDF.41C67EA6@braznet.com.br> Message-ID: <342622F3.7566@smhi.se> Hej, > I know my question might be obvious and so might be the answer, but wha= t > is the way to set the font color that will be stamped onto an image to,= > lets say, pure red? > i have got to white, black and some weird colors with the setink > function but i havent quite understood the one number color value. > is there any literature about this matter? The functionality you're looking for is undocumented. So, the answer to your question is not obvious. You should be able to define your own palette and then draw your text using setink method which looks up a purely red color in the palette. PIL palettes are binary strings with 768 members with the format rgbrgbrgb... I'm just improvising here but the following should be possible to do: # create a palette string "palstr" somehow (not covered here) this =3D Image.new("1", (xsize, ysize), 255) # initiate a white image font =3D ImageFont.load(FONT_PATH + "lubB18.pil") # choose a font this.palette =3D ImagePalette.raw('RGB', palstr) legend.palette.data =3D palstr draw =3D ImageDraw.ImageDraw(this) draw.setfont(font) draw.setink(5) # make sure palstr[14],palstr[15],palstr[16]=3D255,0,0 # for pure red. draw.text((xcoord,ycoord), textstring) # heavy on memory use... del draw I hope this helps. Can you please clarify what you mean by "center a string to be stamped onto an image"? best, -d +------------------+--------------------------------------------------+ | | Daniel B. Michelson | | /\ |\ /| | | | | Swedish Meteorological and Hydrological Institute| | \ | \/ | |__| | | S-601 76 Norrk=F6ping, Sweden |= | \ | | | | | | Telephone: +46 11 - 15 84 94 | | \/ | | | | | | Telefax: +46 11 - 17 02 07 | | | Internet: Daniel.Michelson@smhi.se | +------------------+--------------------------------------------------+ _______________ IMAGE-SIG - SIG on Image Processing with Python send messages to: image-sig@python.org administrivia to: image-sig-request@python.org _______________ From Anthony Baxter Mon Sep 22 09:41:28 1997 From: Anthony Baxter (Anthony Baxter) Date: Mon, 22 Sep 1997 18:41:28 +1000 Subject: [IMAGE-SIG] SETINK - font colors on stamped strings In-Reply-To: Your message of "Mon, 22 Sep 1997 09:49:07 +0200." <342622F3.7566@smhi.se> References: <342622F3.7566@smhi.se> <3422BEDF.41C67EA6@braznet.com.br> Message-ID: <199709220841.SAA15744@shara.off.connect.com.au> >>> Daniel Michelson wrote > The functionality you're looking for is undocumented. So, the answer to > your question is not obvious. You should be able to define your own > palette and then draw your text using setink method which looks up a > purely red color in the palette. PIL palettes are binary strings with > 768 members with the format rgbrgbrgb... I posted an ImagePalette module some time ago to the list - have a look in the archives for it. As far as some of the other options, such as centering a string, I have a module called 'enhImageDraw' which does some of this. Some of the code isn't all that pretty, but it works for me :) Here's the useful bits from it for text... # enhanced ImageDraw functionality. Depends on new ImagePalette code. import Image,ImageDraw,ImageFont,ImagePalette class enhImageDraw(ImageDraw.ImageDraw): "enhanced version of the PIL ImageDraw class" def text(self,(x,y),text,halign=None,valign=None,rot=None): """enhanced text method. obeys colours, x and y can be -ve, center keyword arg (x/y/both)""" m=self.font.getmask(text) if rot == 180: m=m.transpose(Image.ROTATE_180) if rot == 270: m=m.transpose(Image.ROTATE_270) if rot == 90: m=m.transpose(Image.ROTATE_90) if x < 0: x = self.im.size[0] + x - m.size[0] if y < 0: y = self.im.size[1] + y - m.size[1] if halign == "center": x = x - m.size[0]/2 if halign == "right": x = x - m.size[0] if valign == "center": y = y - m.size[1]/2 if valign == "bottom": y = y - m.size[1] self.im.paste(self._newfilled(m.size).im, (x, y, x + m.size[0], y + m.size[1]), m.im) def line(self, xy, xy1 = None): if xy1 == None: self.im.draw_lines(xy, self.ink) else: self.im.draw_line(xy, xy1, self.ink) def shadowtext(self,(x,y),text,mcol,scol,halign=None,valign=None): """draw text with a 'shadow'. Front text will be in colour mcol, shadow in colour scol.""" self.setink(scol) self.text((x-1,y+1),text,halign,valign) self.setink(mcol) self.text((x,y),text,halign,valign) def _newfilled(self,(x,y)): im=Image.new("P",(x,y)) im.im.draw_rectangle((0,0,x,y),self.ink,1) return im _______________ IMAGE-SIG - SIG on Image Processing with Python send messages to: image-sig@python.org administrivia to: image-sig-request@python.org _______________ From emlist@braznet.com.br Mon Sep 22 19:12:20 1997 From: emlist@braznet.com.br (E.M.L.) Date: Mon, 22 Sep 1997 15:12:20 -0300 Subject: [IMAGE-SIG] ImageDraw hack with string centering function Message-ID: <3426B504.794BDF32@braznet.com.br> This is a multi-part message in MIME format. --------------1CFBAE3959E2B60015FB7483 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit hello, just a quick and small hack of the original ImageDraw.py Since a lot of python imaging code newbie users might have experienced the same problem, i have added a simple (but still to be improved) centering function, which allows people (with less time to hack) to draw one way centered strings to an image. the idea of the function is quite simple: for comerciall uses of image processing, some sort of alignment is quite always needed. the hacking took as basis the original ImageDraw text function and the Anthony Baxter enhImageDraw module. if you need more than one-way alignment then better to use Anthony Baxter enhImageDraw module. Comments on the hack are welcome. paulo b. bloedorn Braznet Brazilian Network --------------1CFBAE3959E2B60015FB7483 Content-Type: text/plain; charset=us-ascii; name="ImageDraw.py" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="ImageDraw.py" # # The Python Imaging Library # $Id: ImageDraw.py,v 1.4 1996/11/10 17:52:14 fredrik Exp $ # # drawing interface operations # # History: # 96-04-13 fl Created (experimental) # 96-08-07 fl Filled polygons, ellipses. # 96-08-13 fl Added text support # # Copyright (c) Fredrik Lundh 1996. All rights reserved. # import Image import math class ImageDraw: def __init__(self, im): im.load() self.im = im.im self.ink = 255 self.fill = 0 self.font = None def setink(self, ink): self.ink = ink def setfill(self, onoff): self.fill = onoff def setfont(self, font): self.font = font def line(self, xy, xy1 = None): if xy1 == None: self.im.draw_lines(xy, self.ink) else: self.im.draw_line(xy, xy1, self.ink) def point(self, xy): self.im.draw_point(xy, self.ink) def polygon(self, xy): self.im.draw_polygon(xy, self.ink, self.fill) def rectangle(self, xy): self.im.draw_rectangle(xy, self.ink, self.fill) def ellipse(self, xy): x1, y1, x2, y2 = xy xc, yc = (x1 + x2) / 2, (y1 + y2) / 2 xr, yr = (x1 - x2) / 2, (y1 - y2) / 2 # FIXME: rough; will use the Path module instead xy = [] for i in range(0, 360, 5): a = i * math.pi / 180.0 xy.append(xc+xr*math.cos(a), yc+yr*math.sin(a)) self.im.draw_polygon(xy, self.ink, self.fill) def text(self, xy, text): import ImageFont if not self.font: # FIXME: add font repository self.font = ImageFont.load_path("BDF/courR14.pil") x, y = xy m = self.font.getmask(text) # FIXME: "paste ink" mechanism will be added self.im.paste(Image.core.fill("L", m.size, self.ink), (x, y, x + m.size[0], y + m.size[1]), m.im) def centertext(self, (x,y), text, center=None): # just a small hack of the original code above and the enhImageDraw code of Anthony Baxter # is still quite handycapped but allows easy one-way centering. # usage: ImageDraw.centertext((x,y),text,center) # if center=x text will be horizontally centered # case center=y text will be vertically centered # set either x or y to zero if you want total centering import ImageFont if not self.font: # FIXME: add font repository self.font = ImageFont.load_path("BDF/courR14.pil") m = self.font.getmask(text) if x < 0: x = self.im.size[0] + x - m.size[0] if y < 0: y = self.im.size[1] + y - m.size[1] if x == 0: center == "x" if y == 0: center == "y" if center == "x": x = self.im.size[0]/2 - m.size[0]/2 if center == "y": y = self.im.size[1]/2 - m.size[1]/2 # FIXME: "paste ink" mechanism will be added self.im.paste(Image.core.fill("L", m.size, self.ink), (x, y, x + m.size[0], y + m.size[1]), m.im) --------------1CFBAE3959E2B60015FB7483-- _______________ IMAGE-SIG - SIG on Image Processing with Python send messages to: image-sig@python.org administrivia to: image-sig-request@python.org _______________ From DanF@xinex.com Tue Sep 30 00:41:00 1997 From: DanF@xinex.com (Dan Fandrich) Date: Mon, 29 Sep 1997 16:41:00 -0700 Subject: [IMAGE-SIG] PIL 0.2b4 & XBM files Message-ID: I just installed the Python Imaging Library, rev. 0.2b4, and I soon discovered two problems with XBM files. The first has to do with file names with embedded underscore characters--these are not identified as XBM files. The second has to do with end of line conventions. When editing XBM files under DOS, they have CR as well as NL, which, again, causes them to be not identified as XBM files. I patched XbmImagePlugin.py by replacing the regular expression with the following: # XBM header xbm_head = regex.compile("^#define .*_width \([0-9]*\)\r*\n" "#define .*_height \([0-9]*\)\r*\n" ".*char .*_bits\[\]") >>> Dan _______________ IMAGE-SIG - SIG on Image Processing with Python send messages to: image-sig@python.org administrivia to: image-sig-request@python.org _______________