diff options
Diffstat (limited to 'blenderkit/image_utils.py')
-rw-r--r-- | blenderkit/image_utils.py | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/blenderkit/image_utils.py b/blenderkit/image_utils.py new file mode 100644 index 00000000..b2ade804 --- /dev/null +++ b/blenderkit/image_utils.py @@ -0,0 +1,84 @@ +import bpy +import numpy +import os + +def get_orig_render_settings(): + rs = bpy.context.scene.render + ims = rs.image_settings + + vs = bpy.context.scene.view_settings + + orig_settings = { + 'file_format': ims.file_format, + 'quality': ims.quality, + 'color_mode': ims.color_mode, + 'compression': ims.compression, + 'view_transform': vs.view_transform + } + return orig_settings + + +def set_orig_render_settings(orig_settings): + rs = bpy.context.scene.render + ims = rs.image_settings + vs = bpy.context.scene.view_settings + + ims.file_format = orig_settings['file_format'] + ims.quality = orig_settings['quality'] + ims.color_mode = orig_settings['color_mode'] + ims.compression = orig_settings['compression'] + + vs.view_transform = orig_settings['view_transform'] + + +def img_save_as(img, filepath='//', file_format='JPEG', quality=90, color_mode='RGB', compression=15): + '''Uses Blender 'save render' to save images - BLender isn't really able so save images with other methods correctly.''' + + ors = get_orig_render_settings() + + rs = bpy.context.scene.render + ims = rs.image_settings + ims.file_format = file_format + ims.quality = quality + ims.color_mode = color_mode + ims.compression = compression + + img.save_render(filepath=bpy.path.abspath(filepath), scene=bpy.context.scene) + + set_orig_render_settings(ors) + + +def generate_hdr_thumbnail(): + scene = bpy.context.scene + ui_props = scene.blenderkitUI + hdr_image = ui_props.hdr_upload_image#bpy.data.images.get(ui_props.hdr_upload_image) + + base, ext = os.path.splitext(hdr_image.filepath) + thumb_path = base + '.jpg' + thumb_name = os.path.basename(thumb_path) + + max_thumbnail_size = 2048 + size = hdr_image.size + ratio = size[0] / size[1] + + imageWidth = size[0] + imageHeight = size[1] + thumbnailWidth = min(size[0], max_thumbnail_size) + thumbnailHeight = min(size[1], int(max_thumbnail_size / ratio)) + + tempBuffer = numpy.empty(imageWidth * imageHeight * 4, dtype=numpy.float32) + inew = bpy.data.images.new(thumb_name, imageWidth, imageHeight, alpha=False, float_buffer=False) + + hdr_image.pixels.foreach_get(tempBuffer) + + inew.filepath = thumb_path + inew.colorspace_settings.name = 'Linear' + inew.pixels.foreach_set(tempBuffer) + + bpy.context.view_layer.update() + if thumbnailWidth < imageWidth: + inew.scale(thumbnailWidth, thumbnailHeight) + + img_save_as(inew, filepath=inew.filepath) + + |