| #!/usr/bin/python |
| |
| import sys |
| |
| from vipsCC import * |
| import Image |
| |
| # try this 1,000 times and check for leaks |
| for i in range (0,1000): |
| vim = VImage.VImage (sys.argv[1]) |
| |
| # do some processing in vips ... cut out a small piece of image |
| vim = vim.extract_area (500, 500, 100, 100) |
| |
| # make a PIL image |
| # we use Image.frombuffer (), so PIL is using vim's memory |
| # you need to be very careful not to destroy vim until you're done with pim |
| # ideally you should make a proxy class that wraps this lifetime problem up |
| mode = VImage.PIL_mode_from_vips (vim) |
| size = (vim.Xsize (), vim.Ysize ()) |
| data = vim.tobuffer () |
| pim = Image.frombuffer (mode, size, data, 'raw', mode, 0, 1) |
| |
| # rotate 12 degrees with PIL |
| pim = pim.rotate (12, Image.BILINEAR, 1) |
| |
| # back to vips again |
| # PIL doesn't have a tobuffer method, so we have to use tostring to copy the |
| # data out of PIL and then fromstring to copy back into VIPS |
| str = pim.tostring () |
| bands, format, type = VImage.vips_from_PIL_mode (pim.mode) |
| width, height = pim.size |
| vim2 = VImage.VImage.fromstring (str, width, height, bands, format) |
| |
| # finally write from vips |
| vim2.write (sys.argv[2]) |
| |