diff options
author | Vilém Duha <vilda.novak@gmail.com> | 2020-12-22 16:45:40 +0300 |
---|---|---|
committer | Vilém Duha <vilda.novak@gmail.com> | 2020-12-22 16:45:51 +0300 |
commit | 10ae0f7a5a84b0d9ac8ccbb4abe97e42ab6ca9d1 (patch) | |
tree | b742a78c088cd9baa7d1252054f5595f700dbc4b /blenderkit/image_utils.py | |
parent | 105d485a0327976e12b34f23373079b3b2c4d834 (diff) |
BlenderKit: multiple improvements:
HDR and scene asset types - These are now available when user enables experimental features in addon preferences.
Refactor Upload - no Blender instance isn't launched when not needed and everything happens in a thread, so no waiting for the user when e.g. updating metadata.
improve pasted asset_id string
Change asset type picking interface to fit more asset types
Notify user about brush mode needs
Update categories file
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) + + |