[Image-SIG] How to convert mode 'RGB' into 'P'

Bjoern Platzen bplatzen at sosnetz.de
Fri Oct 10 09:06:09 EDT 2003


Hello List,

I'm a Newbie to the PIL and I'm trying to make a composite of 2 
PNG-files using a 3rd as mask. PNG1 is a map and PNG2 is a Border that 
should be drawn on top of the map.
The only way to do this, seemed to be by generating a new Image ('RGB', 
(sizeX, sizeY), (65535, 65535, 65535)) and paste my PNG1 into it. Then 
I generate a new image with Image.composite(PNG2, NewImage, mask).

The saved Image looks good, but it has about 220 kb and it's mode is 
'RGB'

If I do a Image.composite(PNG2, PNG1, mask), the image has only 94 kb 
and it's mode is 'P'. But in this case, the border (from PNG2) is not 
rendered correctly.

Here's the code-snippet:
import Image
import PngImagePlugin

Image._initialized = 1

##Open all the images, we need...
mymap = Image.open('map800.png')
mask = Image.open('rahmen.png')
myborder = Image.open('rahmen_t.png')
##build a new image as the base of the new image...
white = Image.new('RGB', mymap.size,(65535,65535,65535))
##paste the map onto the white background
white.paste(mymap,(0,0))
##building the output-image by composing the Border with the new Image,
##using a transparent Border-Image as the transparency-mask...
outimg = Image.composite(myborder, white, mask)
outimg2 = Image.composite(myborder, mymap, mask)
outimg.save('combined.png', 'PNG', optimize=1)
outimg2.save('combined2.png', 'PNG', optimize=1)

I tried outimg.convert('P') but it had no effect. The image was still in 
'RGB'-Mode.

Is there anyway to do this? I think my images will become smaller when 
they are in mode 'P'.

Thanks in advance,

Bjoern.

-- 
small office solutions
info at sosnetz.de  -  http://www.sosnetz.de



More information about the Image-SIG mailing list