Skip to content
Snippets Groups Projects
image_utils.py 2.54 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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, view_transform = 'Raw'):
    
        '''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
    
        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)