[Image-SIG] PIL show() not working for 2nd pic

Suresh Kumar suresh.amritapuri at gmail.com
Mon Jan 11 21:24:58 CET 2010


thanks Gregor,

Thank you so much for your time. As I wrote earlier, I temporarily managed
the problem by using ImageMagick display.

regards
suresh


On Sat, Jan 9, 2010 at 3:44 AM, Gregor Kopka <gregor at kopka.net> wrote:

>  Hello Suresh,
>
> under windows image.show() blocks until the external viewer terminates
> (this is true at least with default installed viewer that comes with XP),
> after that the temporary file created by PIL will be unlinked.
>
> I have no clue if this is true with gnome under Linux, but in case the call
> to open the external viewer returns immediately (before the viewer has
> loaded the image) you would see strange things happen since image.show()
> cleans up the temp file when the python script ends, so you likely run into
> a race condition: the temp file (created by im35x.show()) gets unlinked
> before the viewer had time to access it.
>
> Always remember: In case you use code whith cleanup functionality (eg.
> removing temp files on shutdown like image.show() does) keep your code
> running long enough so the external programs you launched have a chance to
> access the files you want to hand over to them!
>
> My best guess would be that
>
> import time
> time.sleep(10)
>
> fixes your issue.
>
> Some things i suggest to change in the workaround code from Jermoes: don't
> hardcode the filename and the location of the temp directory!
>
> path = "/home/adys/.cache/%s.png" % "tmpVfBc3s"
>
> will probably lead to problems down the road: eg. run two instances of the
> code in parallel and they'll fight over the temp file, switch to a viewer
> with a wrapper which immediately returns and you'll potentially overwrite
> the file again in case you open two viewers in quick succession, transfer
> the code to a different system where the hardcoded path dosn't exist and the
> save will fail, (etc.)
>
> Better use:
>
> def show(self):
>     import os, tempfile
>     path = os.path.join (tempfile.gettempdir(), "%s_%s.png" % (os.getpid(), id(self))
>     self.save(path)
>     os.popen("eog %s" % path)
>
> to avoid the potential problems with hardcoded filenames.
>
> Still two things to keep in mind with this:
> - don't forget that with this introduces a dependency on eye of gnome
> - don't forget to clean out the directory supplied by tempfile.gettempdir()
> from time to time to keep the disk from filling up
>
> I hope this helps to shed some light on the subject.
>
> Regards,
>
> Gregor
>
> Suresh Kumar schrieb:
>
> Thanks. Just now i modified all my show methods to
> im.show(command="display") and installed ImageMagick package. That
> temporarily solved my problem. Ok your solution is better anyway.
>
> suresh
>
>
> On Fri, Jan 8, 2010 at 1:15 PM, Jerome Leclanche <adys.wh at gmail.com> <adys.wh at gmail.com> wrote:
>
>
>  You can write a custom show method to your plugins:
> def show(self):
> path = "/home/adys/.cache/%s.png" % "tmpVfBc3s"
> self.save(path)
> import os
> os.popen("eog %s" % path)
> J. Leclanche / Adys
>
>
> On Fri, Jan 8, 2010 at 11:08 PM, Suresh Kumar <suresh.amritapuri at gmail.com> <suresh.amritapuri at gmail.com>
> wrote:
>
>
>  Hi
>
> Thanks. Though not mentioned in the PIL 1.1.6 documentation, I see
> from (sys.path)/PIL/Image.py that it can be done. But I have just one
> more qn. Is it possible to modify _showxv() without altering the
> original code of PIL ?
>
> suresh
>
> On Fri, Jan 8, 2010 at 1:00 PM, Jerome Leclanche <adys.wh at gmail.com> <adys.wh at gmail.com>
> wrote:
>
>
>  In recent versions of PIL you can do img.show(command="display %s") or
> something similar (maybe without %s). Otherwise, edit _showxv in
> (sys.path)/PIL/Image.py
> J. Leclanche / Adys
>
>
> On Fri, Jan 8, 2010 at 10:49 PM, Suresh Kumar<suresh.amritapuri at gmail.com> <suresh.amritapuri at gmail.com>
> wrote:
>
>
>  Hi,
>
> How do you do that? Can you elaborate a bit further?
>
> suresh
>
>
> On Fri, Jan 8, 2010 at 12:39 PM, Jerome Leclanche <adys.wh at gmail.com> <adys.wh at gmail.com>
> wrote:
>
>
>  I'm pretty sure it's a bug in Eye of Gnome. Have you tried hardcoding
> another program in PIL/Image.py ? (_showxv, iirc)
> J. Leclanche / Adys
>
>
> On Fri, Jan 8, 2010 at 10:18 PM, Suresh Kumar<suresh.amritapuri at gmail.com> <suresh.amritapuri at gmail.com>
> wrote:
>
>
>  Hi
>
> Thanks for the reply.
>
> With one file, it is working correctly. Now I get the following
> error
> messages which are different from earlier "file not found ones".
>
> (eog:8368): Gtk-CRITICAL **: gtk_tree_model_get_iter: assertion
> `path->depth > 0' failed
>
> (eog:8368): Gtk-CRITICAL **: gtk_list_store_get_value: assertion
> `VALID_ITER (iter, list_store)' failed
>
> (eog:8368): GLib-GObject-WARNING **:
> /build/buildd/glib2.0-2.20.1/gobject/gtype.c:3940: type id `0' is
> invalid
>
> (eog:8368): GLib-GObject-WARNING **: can't peek value table for type
> `<invalid>' which is not currently referenced
> Segmentation fault
>
> So any suggestions?
> my code:
>
>
>
> -----------------------------------------------------------------------------------------
> #!/usr/bin/python
> print "Aum Amriteshwaryai Namaha"
>
> import Image
>
> imagePath = "/home/suresh/EE241/book_images_3ed/ch03/"
>
> im34 = Image.open(imagePath + "breast_digital_Xray.tif")
> im35 = Image.open(imagePath + "DFT_no_log.tif")
> im35.show()
>
> def neg(x):
>    return 255-1-x
>
> import math
>
> def logtr(x):
>    y = math.log(1+x,10)
>    print y
>    return y*100
>
> im34x = im34.point(neg)
> im34x.show()
>
> im35x = im35.point(logtr)
> im35x.show()
>
> ----------------------------------------------end of
> code--------------------------------
> suresh
>
>
> On Fri, Jan 8, 2010 at 5:29 AM, Bram Mertens<mertensb.mazda at gmail.com> <mertensb.mazda at gmail.com>
> wrote:
>
>
>  On Fri, Jan 8, 2010 at 1:14 AM, suresh.amritapuri<suresh.amritapuri at gmail.com> <suresh.amritapuri at gmail.com> wrote:
>
>
>  Hi
>
> I am using PIL for image processing in ubuntu 9.04. When i give
> two
> im.show() commands for two different images, the second image is
> not
> displayed (eye of gnome is the display program). It says no such
> file
> or directory. Any ideas?
>
>
>  Have you verified that the path to the second image is correct and
> that the image is readable by your script?
>
> e.g. try reversing the order of the images to identify whether or
> not
> it is the image that can not be found or eog.
>
> Another approach might be to check the file using the os module or
> something similar.
>
> Regards
>
> Bram
>
>
>
>  --
> R Suresh Kumar,
> Phd Student, Vislab
> EE, Univ. of California
> Riverside, CA 92507
> --
> Even after all this time The sun never says to the earth, "You owe
> Me."
> Look what happens with A love like that, It lights the Whole Sky.
> - Hafiz e Shirazi
> _______________________________________________
> Image-SIG maillist  -  Image-SIG at python.orghttp://mail.python.org/mailman/listinfo/image-sig
>
>               --
> R Suresh Kumar,
> Phd Student, Vislab
> EE, Univ. of California
> Riverside, CA 92507
> --
> Even after all this time The sun never says to the earth, "You owe Me."
> Look what happens with A love like that, It lights the Whole Sky.
> - Hafiz e Shirazi
>
>
>           --
> R Suresh Kumar,
> Phd Student, Vislab
> EE, Univ. of California
> Riverside, CA 92507
> --
> Even after all this time The sun never says to the earth, "You owe Me."
> Look what happens with A love like that, It lights the Whole Sky.
> - Hafiz e Shirazi
>
>
>
> _______________________________________________
> Image-SIG maillist  -  Image-SIG at python.org
> http://mail.python.org/mailman/listinfo/image-sig
>
>


-- 
R Suresh Kumar,
Phd Student, Vislab
EE, Univ. of California
Riverside, CA 92507
--
Even after all this time The sun never says to the earth, "You owe Me."
Look what happens with A love like that, It lights the Whole Sky.
- Hafiz e Shirazi
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/image-sig/attachments/20100111/b3f3285d/attachment-0001.htm>


More information about the Image-SIG mailing list