File size: 5,041 Bytes
34097e9 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 |
const psapi = require('./psapi')
const html_manip = require('./utility/html_manip')
function finalWidthHeight(
selectionWidth,
selectionHeight,
minWidth,
minHeight
) {
// const minWidth = 512
// const minHeight = 512
// const selectionWidth = 256
// const selectionHeight = 1000
let finalWidth = 0
let finalHeight = 0
if (selectionWidth <= selectionHeight) {
//do operation on the smaller dimension
const scaleRatio = selectionWidth / minWidth
finalWidth = minWidth
finalHeight = selectionHeight / scaleRatio
} else {
const scaleRatio = selectionHeight / minHeight
finalHeight = minHeight
finalWidth = selectionWidth / scaleRatio
}
return [finalWidth, finalHeight]
}
async function selectionToFinalWidthHeight() {
// const { getSelectionInfoExe } = require('./psapi')
try {
const selectionInfo = await psapi.getSelectionInfoExe()
const [finalWidth, finalHeight] = finalWidthHeight(
selectionInfo.width,
selectionInfo.height,
512,
512
)
return [
parseInt(finalWidth),
parseInt(finalHeight),
selectionInfo.width,
selectionInfo.height,
]
} catch (e) {
console.warn('you need a rectangular selection', e)
}
}
async function selectBoundingBox() {
let l = await app.activeDocument.activeLayers[0]
let bounds = await l.boundsNoEffects
let selectionInfo = convertSelectionObjectToSelectionInfo(bounds)
await psapi.reSelectMarqueeExe(selectionInfo)
return selectionInfo
}
function convertSelectionObjectToSelectionInfo(selection_obj) {
let selection_info = {
left: selection_obj._left,
right: selection_obj._right,
bottom: selection_obj._bottom,
top: selection_obj._top,
height: selection_obj._bottom - selection_obj._top,
width: selection_obj._right - selection_obj._left,
}
return selection_info
}
const SelectionInfoDesc = () => ({
_obj: 'get',
_target: [
{
_property: 'selection',
},
{
_ref: 'document',
_id: app.activeDocument._id,
},
],
_options: {
dialogOptions: 'dontDisplay',
},
})
class Selection {
static async getSelectionInfoExe() {
//return a selectionInfo object or undefined
try {
const selection = await executeAsModal(async () => {
const result = await batchPlay([SelectionInfoDesc()], {
synchronousExecution: true,
modalBehavior: 'execute',
})
return result[0]?.selection
})
if (this.isSelectionValid(selection)) {
let selection_info = {
left: selection.left._value,
right: selection.right._value,
bottom: selection.bottom._value,
top: selection.top._value,
height: selection.bottom._value - selection.top._value,
width: selection.right._value - selection.left._value,
}
// console.dir({selection_info})
return selection_info
}
} catch (e) {
console.warn('selection info error', e)
}
}
static isSelectionValid(selection) {
console.warn(
'isSelectionValid is deprecated use selection.isSelectionValid instead'
)
if (
selection && // check if the selection is defined
selection.hasOwnProperty('left') &&
selection.hasOwnProperty('right') &&
selection.hasOwnProperty('top') &&
selection.hasOwnProperty('bottom')
) {
return true
}
return false
}
static reselectArea(selection_info) {}
static isSameSelection(selection_info_1, selection_info_2) {}
static async getImageToSelectionDifference() {
const selectionInfo = await psapi.getSelectionInfoExe()
const width = html_manip.getWidth()
const height = html_manip.getHeight()
const scale_info_str = `${parseInt(width)}x${parseInt(
height
)} => ${parseInt(selectionInfo.width)}x${parseInt(
selectionInfo.height
)} `
let ratio =
(width * height) / (selectionInfo.width * selectionInfo.height)
// const arrow = percentage >= 1 ? '↑' : '↓'
// percentage = percentage >= 1 ? percentage : 1 / percentage
// const percentage_str = `${arrow}X${percentage.toFixed(2)}`
// console.log('scale_info_str: ', scale_info_str)
// console.log('percentage_str: ', percentage_str)
return ratio
}
static {}
}
module.exports = {
finalWidthHeight,
selectionToFinalWidthHeight,
selectBoundingBox,
convertSelectionObjectToSelectionInfo,
Selection,
}
|