kcoley / gltf2usd

command-line utility for converting glTF 2.0 models to USD
MIT License
263 stars 39 forks source link

IOError: cannot write mode RGBA as JPEG #85

Closed ghost closed 5 years ago

ghost commented 5 years ago

I'm getting this error when I try to create a USDZ.

The asset is a .jpg

Any idea why it does that sudently?

converted usd file extension from .usdz to .usdc: /var/app/current/tmp/e065a999d736e7fc6a161368fcab37b7b5b118de9d19f8c1c71b7407bfa2df69/usdz/dist.usdc
Traceback (most recent call last):
  File "/usr/local/gltf2usd/Source/gltf2usd.py", line 728, in <module>
    convert_to_usd(args.gltf_file, args.usd_file, args.fps, args.scale, args.arkit, args.verbose, args.use_euler_rotation)
  File "/usr/local/gltf2usd/Source/gltf2usd.py", line 681, in convert_to_usd
    usd = GLTF2USD(gltf_file=gltf_file, usd_file=usd_file, fps=fps, scale=scale, verbose=verbose, use_euler_rotation=use_euler_rotation)
  File "/usr/local/gltf2usd/Source/gltf2usd.py", line 71, in __init__
    self.convert()
  File "/usr/local/gltf2usd/Source/gltf2usd.py", line 658, in convert
    self._convert_materials_to_preview_surface_new()
  File "/usr/local/gltf2usd/Source/gltf2usd.py", line 433, in _convert_materials_to_preview_surface_new
    usd_material.convert_material_to_usd_preview_surface(material, self.output_dir)
  File "/usr/local/gltf2usd/Source/usd_material.py", line 21, in convert_material_to_usd_preview_surface
    usd_preview_surface = USDPreviewSurface(self._stage, gltf_material, self, output_directory)
  File "/usr/local/gltf2usd/Source/usd_material.py", line 41, in __init__
    self._initialize_from_gltf_material(gltf_material)
  File "/usr/local/gltf2usd/Source/usd_material.py", line 104, in _initialize_from_gltf_material
    self._set_khr_material_pbr_specular_glossiness(gltf_material)
  File "/usr/local/gltf2usd/Source/usd_material.py", line 166, in _set_khr_material_pbr_specular_glossiness
    self._set_pbr_metallic_roughness(gltf_material)
  File "/usr/local/gltf2usd/Source/usd_material.py", line 159, in _set_pbr_metallic_roughness
    self._set_pbr_base_color(pbr_metallic_roughness)
  File "/usr/local/gltf2usd/Source/usd_material.py", line 233, in _set_pbr_base_color
    destination = base_color_texture.write_to_directory(self._output_directory, GLTFImage.ImageColorChannels.RGBA)
  File "/usr/local/gltf2usd/Source/gltf2/Material.py", line 33, in write_to_directory
    return self._image.write_to_directory(output_directory, channels, texture_prefix)
  File "/usr/local/gltf2usd/Source/gltf2/GLTFImage.py", line 54, in write_to_directory
    img.save(destination)
  File "/usr/local/lib64/python2.7/site-packages/PIL/Image.py", line 1950, in save
    save_handler(self, fp, filename)
  File "/usr/local/lib64/python2.7/site-packages/PIL/JpegImagePlugin.py", line 623, in _save
    raise IOError("cannot write mode %s as JPEG" % im.mode)
IOError: cannot write mode RGBA as JPEG
ghost commented 5 years ago

The image I'm using is this one

As you can see the EXIF says it is on a RGB channel.

I saw that you did an update on this file to force RGB for jpeg. Now it's working.