[Bf-extensions-cvs] [faa9fc7f] blender-v3.1-release: Fix T95300: glTF importer: fix import binary images

Julien Duroure noreply at git.blender.org
Tue Feb 1 21:42:40 CET 2022


Commit: faa9fc7f98e19be54a715c24061185b04dff5b6c
Author: Julien Duroure
Date:   Tue Feb 1 21:42:27 2022 +0100
Branches: blender-v3.1-release
https://developer.blender.org/rBAfaa9fc7f98e19be54a715c24061185b04dff5b6c

Fix T95300: glTF importer: fix import binary images

===================================================================

M	io_scene_gltf2/__init__.py
M	io_scene_gltf2/blender/imp/gltf2_blender_image.py

===================================================================

diff --git a/io_scene_gltf2/__init__.py b/io_scene_gltf2/__init__.py
index 1a97bee8..9ed65aed 100755
--- a/io_scene_gltf2/__init__.py
+++ b/io_scene_gltf2/__init__.py
@@ -15,7 +15,7 @@
 bl_info = {
     'name': 'glTF 2.0 format',
     'author': 'Julien Duroure, Scurest, Norbert Nopper, Urs Hanselmann, Moritz Becher, Benjamin Schmithüsen, Jim Eckerlein, and many external contributors',
-    "version": (1, 8, 13),
+    "version": (1, 8, 14),
     'blender': (3, 1, 0),
     'location': 'File > Import-Export',
     'description': 'Import-Export as glTF 2.0',
diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_image.py b/io_scene_gltf2/blender/imp/gltf2_blender_image.py
index 0df6dc0e..cf4a9595 100755
--- a/io_scene_gltf2/blender/imp/gltf2_blender_image.py
+++ b/io_scene_gltf2/blender/imp/gltf2_blender_image.py
@@ -34,68 +34,76 @@ class BlenderImage():
         """Image creation."""
         img = gltf.data.images[img_idx]
 
-        import_user_extensions('gather_import_image_before_hook', gltf, img)
-
-        img_name = img.name
-
         if img.blender_image_name is not None:
             # Image is already used somewhere
             return
 
-        is_binary = False
-        is_placeholder = False
-
-        num_images = len(bpy.data.images)
+        import_user_extensions('gather_import_image_before_hook', gltf, img)
 
         if img.uri is not None and not img.uri.startswith('data:'):
-            # Image stored in a file
-            path = join(dirname(gltf.filename), _uri_to_path(img.uri))
-            path = os.path.abspath(path)
-            if bpy.data.is_saved and bpy.context.preferences.filepaths.use_relative_paths:
-                try:
-                    path = bpy.path.relpath(path)
-                except:
-                    # May happen on Windows if on different drives, eg. C:\ and D:\
-                    pass
-
-            img_name = img_name or basename(path)
-
-            try:
-                blender_image = bpy.data.images.load(
-                    path,
-                    check_existing=True,
-                )
-            except RuntimeError:
-                gltf.log.error("Missing image file (index %d): %s" % (img_idx, path))
-                blender_image = _placeholder_image(img_name, os.path.abspath(path))
-                is_placeholder = True
-
+            blender_image = create_from_file(gltf, img_idx)
         else:
-            # Image stored as data => pack
-            is_binary = True
-            img_data = BinaryData.get_image_data(gltf, img_idx)
-            if img_data is None:
-                return
-            img_name = 'Image_%d' % img_idx
-
-            # Create image, width and height are dummy values
-            img_pack = bpy.data.images.new(img_name, 8, 8)
-            # Set packed file data
-            img_pack.pack(data=img_data.tobytes(), data_len=len(img_data))
-            img_pack.source = 'FILE'
-            img.blender_image_name = img_pack.name
-
-        if is_binary is False:
-            if len(bpy.data.images) != num_images:  # If created a new image
-                blender_image.name = img_name
-                img.blender_image_name = img_name
-
-                needs_pack = gltf.import_settings['import_pack_images']
-                if not is_placeholder and needs_pack:
-                    blender_image.pack()
+            blender_image = create_from_data(gltf, img_idx)
+
+        if blender_image:
+            img.blender_image_name = blender_image.name
 
         import_user_extensions('gather_import_image_after_hook', gltf, img, blender_image)
 
+
+def create_from_file(gltf, img_idx):
+    # Image stored in a file
+
+    num_images = len(bpy.data.images)
+
+    img = gltf.data.images[img_idx]
+
+    path = join(dirname(gltf.filename), _uri_to_path(img.uri))
+    path = os.path.abspath(path)
+    if bpy.data.is_saved and bpy.context.preferences.filepaths.use_relative_paths:
+        try:
+            path = bpy.path.relpath(path)
+        except:
+            # May happen on Windows if on different drives, eg. C:\ and D:\
+            pass
+
+    img_name = img.name or basename(path)
+
+    try:
+        blender_image = bpy.data.images.load(
+            path,
+            check_existing=True,
+        )
+
+        needs_pack = gltf.import_settings['import_pack_images']
+        if needs_pack:
+            blender_image.pack()
+
+    except RuntimeError:
+        gltf.log.error("Missing image file (index %d): %s" % (img_idx, path))
+        blender_image = _placeholder_image(img_name, os.path.abspath(path))
+
+    if len(bpy.data.images) != num_images:  # If created a new image
+        blender_image.name = img_name
+
+    return blender_image
+        
+
+def create_from_data(gltf, img_idx):
+    # Image stored as data => pack
+    img_data = BinaryData.get_image_data(gltf, img_idx)
+    if img_data is None:
+        return
+    img_name = 'Image_%d' % img_idx
+
+    # Create image, width and height are dummy values
+    blender_image = bpy.data.images.new(img_name, 8, 8)
+    # Set packed file data
+    blender_image.pack(data=img_data.tobytes(), data_len=len(img_data))
+    blender_image.source = 'FILE'
+
+    return blender_image
+
 def _placeholder_image(name, path):
     image = bpy.data.images.new(name, 128, 128)
     # allow the path to be resolved later



More information about the Bf-extensions-cvs mailing list