Image
-- **************************************************
-- Provide Moho with the name of this script object
-- **************************************************

ScriptName = "SZ_ImagesRenderQuality"

-- **************************************************
-- General information about this script
-- **************************************************

SZ_ImagesRenderQuality = {}

function SZ_ImagesRenderQuality:Name()
    return self:Localize("Name")
end

function SZ_ImagesRenderQuality:Version()
    return "1.0"
end

function SZ_ImagesRenderQuality:UILabel()
    return self:Localize("Name")
end

function SZ_ImagesRenderQuality:Creator()
    return "Stan from 2danimator.ru"
end

function SZ_ImagesRenderQuality:Description()
    return self:Localize("Description")
end

-- **************************************************
-- Recurring values
-- **************************************************

SZ_ImagesRenderQuality.modifySampling = false
SZ_ImagesRenderQuality.nearestNeighbor = false
SZ_ImagesRenderQuality.modifyQuality = true
SZ_ImagesRenderQuality.highQuality = true

SZ_ImagesRenderQuality.displayMessage = true

-- **************************************************
-- Is Enabled
-- **************************************************

function SZ_ImagesRenderQuality:IsEnabled(moho)
    return true
end

-- **************************************************
-- Dialog
-- **************************************************

local SZ_ImagesRenderQualityDialog = {}

function SZ_ImagesRenderQualityDialog:new(moho)
    local d = LM.GUI.SimpleDialog(SZ_ImagesRenderQuality:Localize("Name"), SZ_ImagesRenderQualityDialog)
    local l = d:GetLayout()
    
    d.moho = moho
    
    l:PushV()
        l:AddChild(LM.GUI.StaticText(SZ_ImagesRenderQuality:Localize("GUIDescription")), LM.GUI.ALIGN_LEFT)
        l:AddPadding(20)
        l:AddChild(LM.GUI.StaticText(SZ_ImagesRenderQuality:Localize("Sampling")), LM.GUI.ALIGN_LEFT)
        l:PushH()
            l:AddPadding(30)
            d.samplingOn = LM.GUI.RadioButton(SZ_ImagesRenderQuality:Localize("TurnOn"))
            l:AddChild(d.samplingOn, LM.GUI.ALIGN_LEFT)
            d.samplingOff = LM.GUI.RadioButton(SZ_ImagesRenderQuality:Localize("TurnOff"))
            l:AddChild(d.samplingOff, LM.GUI.ALIGN_LEFT)
            d.samplingLeave = LM.GUI.RadioButton(SZ_ImagesRenderQuality:Localize("LeaveAsIs"))
            l:AddChild(d.samplingLeave, LM.GUI.ALIGN_LEFT)
        l:Pop()
        l:AddPadding(20)
        l:AddChild(LM.GUI.StaticText(SZ_ImagesRenderQuality:Localize("Quality")), LM.GUI.ALIGN_LEFT)
        l:PushH()
            l:AddPadding(30)
            d.qualityOn = LM.GUI.RadioButton(SZ_ImagesRenderQuality:Localize("TurnOn"))
            l:AddChild(d.qualityOn, LM.GUI.ALIGN_LEFT)
            d.qualityOff = LM.GUI.RadioButton(SZ_ImagesRenderQuality:Localize("TurnOff"))
            l:AddChild(d.qualityOff, LM.GUI.ALIGN_LEFT)
            d.qualityLeave = LM.GUI.RadioButton(SZ_ImagesRenderQuality:Localize("LeaveAsIs"))
            l:AddChild(d.qualityLeave, LM.GUI.ALIGN_LEFT)
        l:Pop()
        l:AddPadding(10)
    l:Pop()
    
    return d
end

function SZ_ImagesRenderQualityDialog:UpdateWidgets()
    if SZ_ImagesRenderQuality.modifySampling then
        if SZ_ImagesRenderQuality.nearestNeighbor then
            self.samplingOn:SetValue(true)
        else
            self.samplingOff:SetValue(true)		
        end
    else
        self.samplingLeave:SetValue(true)
    end
        
    if SZ_ImagesRenderQuality.modifyQuality then
        if SZ_ImagesRenderQuality.highQuality then
            self.qualityOn:SetValue(true)
        else
            self.qualityOff:SetValue(true)		
        end
    else
        self.qualityLeave:SetValue(true)
    end
end

function SZ_ImagesRenderQualityDialog:OnOK()
    SZ_ImagesRenderQuality.modifySampling = not self.samplingLeave:Value()
    SZ_ImagesRenderQuality.nearestNeighbor = self.samplingOn:Value()
    SZ_ImagesRenderQuality.modifyQuality = not self.qualityLeave:Value()
    SZ_ImagesRenderQuality.highQuality = self.qualityOn:Value()
end

-- **************************************************
-- The guts of this script
-- **************************************************

function SZ_ImagesRenderQuality:Run(moho)
    local dlog = SZ_ImagesRenderQualityDialog:new(moho)
    if (dlog:DoModal() == LM.GUI.MSG_CANCEL) then
        return
    end

    moho.document:PrepMultiUndo(true)
    moho.document:SetDirty()
    
    local samplingMode = self.nearestNeighbor and MOHO.SM_NEAREST or MOHO.SM_BILINEAR
    local qualityLevel = self.highQuality and 2 or 1
    
    local numberOfAffectedLayers = 0
    
    local count = 0
    repeat
        local layer = moho.document:LayerByAbsoluteID(count)
        if layer then
            count = count + 1
            local imageLayer = moho:LayerAsImage(layer)
            if imageLayer then
                local modified = false -- a flag to indicate if the numberOfAffectedLayers should be incremented
                
                if self.modifySampling then
                    imageLayer:SetSamplingMode(samplingMode)
                    modified = true
                end
                
                if self.modifyQuality then
                    imageLayer:SetQualityLevel(qualityLevel)
                    modified = true
                end
                
                if modified then
                    numberOfAffectedLayers = numberOfAffectedLayers + 1
                end
            end
        end
    until not layer
    
    if self.displayMessage then
        LM.GUI.Alert(LM.GUI.ALERT_INFO, self:Localize("Message1"), self:Localize("Message2")..numberOfAffectedLayers, nil, "OK", nil, nil)
    end
end

function SZ_ImagesRenderQuality:Localize(text)
    local fileWord = MOHO.Localize("/Menus/File/File=File")
    
    local phrase = {}
    
    phrase["Name"] = "Images Render Quality"
    phrase["Description"] = "Modifies all image layers' render quality settings"
    phrase["GUIDescription"] = "WARNING! This will modify all image layers in the project!"
    phrase["Sampling"] = "Nearest neighbor sampling:"
    phrase["Quality"] = "Higher quality rendering:"
    phrase["TurnOn"] = "Turn ON"
    phrase["TurnOff"] = "Turn OFF"
    phrase["LeaveAsIs"] = "Leave as is"
    phrase["Message1"] = "Operation complete"
    phrase["Message2"] = "Number of layers changed: "
    
    if fileWord == "Файл" then
        phrase["Name"] = "Качество рендера растра"
        phrase["Description"] = "Изменяет настройки качества рендера для всех растровых слоев"
        phrase["GUIDescription"] = "ВНИМАНИЕ! Будут изменены настройки всех растровых слоев!"
        phrase["Sampling"] = "Не сглаживать:"
        phrase["Quality"] = "Рендер высокого качества:"
        phrase["TurnOn"] = "Включить"
        phrase["TurnOff"] = "Выключить"
        phrase["LeaveAsIs"] = "Оставить как есть"
        phrase["Message1"] = "Операция завершена"
        phrase["Message2"] = "Изменено слоев: "
    end
    
    return phrase[text];
end

Images Render Quality
Listed

Author: Stan View Script
Script type: Button/Menu

Uploaded: Dec 26 2020, 23:30

Menu script to quickly set the Render Quality for all image layers in the project.
Image
It's the same as go through all project's image layers and set those settings for all of them. Works very fast.
Image

Installation Options:

This script, and all other scripts on this site are distributed as free software under the GNU General Public License 3.0 or later.
Downloads count: 630