未だに classic class なライブラリは多い。Python 3 への道は遠い…
# register a pickle handler for Image.Image object import Image, copy_reg def Image_unpickler(mode, size, data): return Image.fromstring(mode, size, data).im def Image_pickler(im): """see Image.Image.tostring()""" e = Image._getencoder(im.mode, 'raw', im.mode) e.setimage(im) bufsize = max(65536, im.size[0] * 4) # see RawEncode.c data = [] while 1: l, s, d = e.encode(bufsize) data.append(d) if s: break if s < 0: raise RuntimeError("encoder error %d in tostring" % s) data = ''.join(data) return Image_unpickler, (im.mode, im.size, data, ) ImagingCore = type(Image.core.new('1', (1, 1))) copy_reg.pickle(ImagingCore, Image_pickler, Image_unpickler)
速度が期待できないディスクとかネットワークとかだと展開速度 > IO の速度になる事も多いので圧縮かますのもあり。
メモリ経由でもどれだけコピーされるか分かったもんじゃないのでもう全部 jpeg でいいよ…