Это проблема в коде Pillow .Метод TiffImageFile._load_libtiff
выполняет строку self.tile = []
.Этот метод вызывается, когда вызывается np.array(img)
или np.asarray(img)
, потому что numpy обращается к свойству __array_interface__
, а реализация этого свойства вызывает self.tobytes()
, который вызывает self.load()
, а в экземпляре TiffImageFile
, который приводитна вызов self._load_libtiff()
.
Атрибут tile
может быть неожиданно перенесен без использования numpy.Например,
In [25]: img = Image.open('foo.tiff')
In [26]: img.tile
Out[26]: [('tiff_lzw', (0, 0, 499, 630), 0, ('RGB', 'tiff_lzw', False))]
In [27]: img2 = img.convert(mode='RGB')
In [28]: img.tile
Out[28]: []
Первая строка строки документа convert
- «Возвращает преобразованную копию этого изображения», поэтому удивительно, что метод изменяет атрибут tile
.Я бы назвал это Подушкой, но, возможно, есть веская причина для этого побочного эффекта.