Skip to content

Commit

Permalink
Merge pull request #998 from scurest/iss-986
Browse files Browse the repository at this point in the history
Export: less naive file format detection (fix #986)
  • Loading branch information
julienduroure authored Apr 11, 2020
2 parents 12572ed + 50dc3fd commit b90e689
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ def __gather_mime_type(sockets_or_slots, export_image, export_settings):

if export_settings["gltf_image_format"] == "AUTO":
image = export_image.blender_image()
if image is not None and image.file_format == 'JPEG':
if image is not None and __is_blender_image_a_jpeg(image):
return "image/jpeg"
return "image/png"

Expand Down Expand Up @@ -244,3 +244,10 @@ def __get_texname_from_slot(sockets_or_slots, export_settings):

elif isinstance(sockets_or_slots[0], bpy.types.MaterialTextureSlot):
return sockets_or_slots[0].texture.image.name


def __is_blender_image_a_jpeg(image: bpy.types.Image) -> bool:
if image.source != 'FILE':
return False
path = image.filepath_raw.lower()
return path.endswith('.jpg') or path.endswith('.jpeg') or path.endswith('.jpe')
13 changes: 11 additions & 2 deletions addons/io_scene_gltf2/blender/exp/gltf2_blender_image.py
Original file line number Diff line number Diff line change
Expand Up @@ -272,15 +272,24 @@ def __encode_from_numpy_array(self, array: np.ndarray) -> bytes:

def __encode_from_image(self, image: bpy.types.Image) -> bytes:
# See if there is an existing file we can use.
data = None
if image.source == 'FILE' and image.file_format == self.file_format and \
not image.is_dirty:
if image.packed_file is not None:
return image.packed_file.data
data = image.packed_file.data
else:
src_path = bpy.path.abspath(image.filepath_raw)
if os.path.isfile(src_path):
with open(src_path, 'rb') as f:
return f.read()
data = f.read()
# Check magic number is right
if data:
if self.file_format == 'PNG':
if data.startswith(b'\x89PNG'):
return data
elif self.file_format == 'JPEG':
if data.startswith(b'\xff\xd8\xff'):
return data

# Copy to a temp image and save.
tmp_image = None
Expand Down

0 comments on commit b90e689

Please sign in to comment.