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, 'exr_codec': ims.exr_codec, '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'] ims.exr_codec = orig_settings['exr_codec'] vs.view_transform = orig_settings['view_transform'] def img_save_as(img, filepath='//', file_format='JPEG', quality=90, color_mode='RGB', compression=15, view_transform = 'Raw', exr_codec = 'DWAA'): '''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 vs = bpy.context.scene.view_settings ims = rs.image_settings ims.file_format = file_format ims.quality = quality ims.color_mode = color_mode ims.compression = compression ims.exr_codec = exr_codec vs.view_transform = view_transform 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)