This gives me an idea for how to make this easier on the next person to come
across it: I will rig it so that ImageBuf.write() will automatically invalidate
the file in the ImageCache.
-- lg
> On Apr 12, 2018, at 4:53 AM, Stéphane Bertrand <[email protected]> wrote:
>
> Thanks for yours helpfulls answers
>
> Will: in fact, i can convert without delete source image, but isn't my
> objectif.
> I've 17To of datas for my left eyes, i need the same for my right eyes, and
> i've only ...... 20To
> I'm not fan ( and a little stress) to work directely on rendering source
> pictures, but i don"t have choice (mistake in rendering parameters )
>
> Larry have THE solution, thx.
> in python, i can't directely instantiated from python :
> oiio.ImageCache().invalidate (DIR_PATH+IN_FILE) return "RuntimeError: This
> class cannot be instantiated from Python"
>
> but if i declare it before on startup :
> IMG_CACHE = oiio.ImageCache.create(True)
> and
> IMG_CACHE.invalidate(in_file)
>
> the file is release and i can delete it ( HAPPY)
>
> thx a lot, i can run my script this weekend and win free space
>
> Stephane
>
>
>
> 2018-04-11 18:44 GMT+02:00 Larry Gritz <[email protected]
> <mailto:[email protected]>>:
> Where does the error occur? On the call to rename?
>
> I think that what's happening is that your ImageBuf is backed by an
> ImageCache, which is holding the file open. That's my current hypothesis
> anyway.
>
> I have two suggestions, either one might work:
>
> 1. Read the file explicitly, and use the 'force' parameter to read it fully
> without being backed by an ImageCache.
>
> img = oiio.ImageBuf(DIR_PATH+IN_FILE)
> img.read (force=True)
>
> 2. Tell the ImageCache to close and release the file by invalidating it:
>
> write_image(img, DIR_PATH+out_file)
> oiio.ImageCache().invalidate (DIR_PATH+IN_FILE)
>
> (Note: the default ImageCache() constructor will retrieve the "shared" one.)
>
>
>
>> On Apr 11, 2018, at 7:39 AM, Stéphane Bertrand <[email protected]
>> <mailto:[email protected]>> wrote:
>>
>> hi all,
>>
>> i've this simple script, inpire by snippet in the docs :
>>
>> import os
>> import OpenImageIO as oiio
>>
>>
>> DIR_PATH = r"D:\Seq02\Scn01\Shot01\Left\pass\Decor\\"
>> IN_FILE = "Seq02_Scn01_Shot01_Decor_0000.exr"
>>
>>
>> ext = IN_FILE.rfind(".")
>> out_file = IN_FILE[:ext]+ ".tmp" + IN_FILE[ext:]
>>
>>
>> def write_image (image, filename, format=oiio.UNKNOWN) :
>> if not image.has_error :
>> image.set_write_format (format)
>> image.write (filename)
>> if image.has_error :
>> print("Error writing", filename, ":", image.geterror())
>>
>> img = oiio.ImageBuf(DIR_PATH+IN_FILE)
>> img.specmod().attribute("compression", "dwaa")
>> write_image(img, DIR_PATH+out_file)
>>
>> os.remove(DIR_PATH+IN_FILE)
>> os.rename(DIR_PATH+out_file, DIR_PATH+IN_FILE)
>>
>> it's a simple script for inplace convert with dwa compression a EXR file
>> but i've a PermissionError, my own process have hands on my file
>> i'll try to add
>> img.reset(oiio.ImageSpec())
>> for free my image
>> but not
>>
>> thx for your help
>> Stéphane
>>
>>
>> _______________________________________________
>> Oiio-dev mailing list
>> [email protected] <mailto:[email protected]>
>> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
>> <http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org>
>
> --
> Larry Gritz
> [email protected] <mailto:[email protected]>
>
>
>
>
>
> _______________________________________________
> Oiio-dev mailing list
> [email protected] <mailto:[email protected]>
> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
> <http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org>
>
>
> _______________________________________________
> Oiio-dev mailing list
> [email protected]
> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
--
Larry Gritz
[email protected]
_______________________________________________
Oiio-dev mailing list
[email protected]
http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org