trim update: power parameter

This commit is contained in:
viliusle 2022-01-10 21:17:59 +02:00
parent d71629e49a
commit 4c6204224d

View File

@ -50,14 +50,14 @@ class Image_trim_class {
params: [
{name: "trim_layer", title: "Trim layer:", value: true},
{name: "trim_all", title: "Trim borders:", value: true},
{}, //gap
{name: "power", title: "Power:", value: 0, max: 255},
{name: "remove_white", title: "Trim white color?", value: removeWhiteColor},
],
on_finish: (params) => {
if (params.trim_layer == true) {
//first trim
let actions = [];
actions = actions.concat(this.trim_layer(config.layer.id, params.remove_white));
actions = actions.concat(this.trim_layer(config.layer.id, params.remove_white, params.power));
app.State.do_action(
new app.Actions.Bundle_action('trim_layers', 'Trim Layers', actions)
);
@ -66,7 +66,7 @@ class Image_trim_class {
//second trim
setTimeout(function(){
let actions = [];
actions = actions.concat(_this.trim_all(params.remove_white));
actions = actions.concat(_this.trim_all(params.remove_white, params.power));
app.State.do_action(
new app.Actions.Bundle_action('trim_layers', 'Trim Layers', actions)
);
@ -83,8 +83,9 @@ class Image_trim_class {
*
* @param layer_id
* @param removeWhiteColor
* @param {int} power
*/
trim_layer(layer_id, removeWhiteColor = false) {
trim_layer(layer_id, removeWhiteColor = false, power = 0) {
var layer = this.Base_layers.get_layer(layer_id);
if (layer.type != 'image') {
@ -92,7 +93,7 @@ class Image_trim_class {
return false;
}
var trim = this.get_trim_info(layer_id, removeWhiteColor);
var trim = this.get_trim_info(layer_id, removeWhiteColor, power);
trim = trim.relative;
//if image was stretched
@ -128,8 +129,9 @@ class Image_trim_class {
* this affect canvas size and all layers positions
*
* @param removeWhiteColor
* @param {int} power
*/
trim_all(removeWhiteColor = false) {
trim_all(removeWhiteColor = false, power = 0) {
let actions = [];
var all_top = config.HEIGHT;
@ -150,7 +152,7 @@ class Image_trim_class {
if (layer.width == null || layer.height == null || layer.x == null || layer.y == null) {
//layer without dimensions
const trim_info = this.get_trim_info(layer.id, removeWhiteColor);
const trim_info = this.get_trim_info(layer.id, removeWhiteColor, power);
all_top = Math.min(all_top, trim_info.top);
all_left = Math.min(all_left, trim_info.left);
@ -196,9 +198,10 @@ class Image_trim_class {
*
* @param {int} layer_id
* @param {boolean} trim_white
* @param {int} power
* @returns {object} keys: top, left, bottom, right, width, height, relative
*/
get_trim_info(layer_id, trim_white) {
get_trim_info(layer_id, trim_white, power) {
if (trim_white == undefined) {
trim_white = false;
if (config.TRANSPARENCY == false) {
@ -223,9 +226,10 @@ class Image_trim_class {
for (var y = 0; y < img.height; y++) {
for (var x = 0; x < img.width; x++) {
var k = ((y * (img.width * 4)) + (x * 4));
if (imgData[k + 3] == 0)
if (imgData[k + 3] <= power)
continue; //transparent
if (trim_white == true && imgData[k] == 255 && imgData[k + 1] == 255 && imgData[k + 2] == 255)
if (trim_white == true && imgData[k] >= 255 - power && imgData[k + 1] >= 255 - power
&& imgData[k + 2] >= 255 - power)
continue; //white
break main1;
}
@ -236,9 +240,10 @@ class Image_trim_class {
for (var x = 0; x < img.width; x++) {
for (var y = 0; y < img.height; y++) {
var k = ((y * (img.width * 4)) + (x * 4));
if (imgData[k + 3] == 0)
if (imgData[k + 3] <= power)
continue; //transparent
if (trim_white == true && imgData[k] == 255 && imgData[k + 1] == 255 && imgData[k + 2] == 255)
if (trim_white == true && imgData[k] >= 255 - power && imgData[k + 1] >= 255 - power
&& imgData[k + 2] >= 255 - power)
continue; //white
break main2;
}
@ -249,9 +254,10 @@ class Image_trim_class {
for (var y = img.height - 1; y >= 0; y--) {
for (var x = img.width - 1; x >= 0; x--) {
var k = ((y * (img.width * 4)) + (x * 4));
if (imgData[k + 3] == 0)
if (imgData[k + 3] <= power)
continue; //transparent
if (trim_white == true && imgData[k] == 255 && imgData[k + 1] == 255 && imgData[k + 2] == 255)
if (trim_white == true && imgData[k] >= 255 - power && imgData[k + 1] >= 255 - power
&& imgData[k + 2] >= 255 - power)
continue; //white
break main3;
}
@ -262,9 +268,10 @@ class Image_trim_class {
for (var x = img.width - 1; x >= 0; x--) {
for (var y = img.height - 1; y >= 0; y--) {
var k = ((y * (img.width * 4)) + (x * 4));
if (imgData[k + 3] == 0)
if (imgData[k + 3] <= power)
continue; //transparent
if (trim_white == true && imgData[k] == 255 && imgData[k + 1] == 255 && imgData[k + 2] == 255)
if (trim_white == true && imgData[k] >= 255 - power && imgData[k + 1] >= 255 - power
&& imgData[k + 2] >= 255 - power)
continue; //white
break main4;
}