सभी अच्छे जवाब, योगदान के लिए धन्यवाद।
जैसा कि मैंने कहा, मैं सोच रहा था कि क्या वहाँ फ़ोटोशॉप के लिए कुछ था।
प्रलेखन उद्देश्यों के लिए यहाँ एक छोटी स्क्रिप्ट है जो मैंने लिखी है:
var doc = app.activeDocument;
var arranger = makeDialog();
arranger .arrange.onClick = function(){
if(isNaN(parseInt(arranger.w.text)) || isNaN(parseInt(arranger.h.text)) || isNaN(parseInt(arranger.c.text)) || isNaN(parseInt(arranger.r.text))){
alert('Yo! Can you feed \' dis dialog some integer numbers ?\n For Real!');
}else{
sliceLayer(parseInt(arranger.w.text),parseInt(arranger.h.text),parseInt(arranger.r.text),parseInt(arranger.c.text));
}
arranger.close();
}
arranger.show();
function sliceLayer(w,h,r,c){
var hw = w * 0.5;
var hh = h * 0.5;
var l0 = doc.activeLayer;
for(var j = 0 ; j < r ; j++){
for(var i = 0 ; i < c; i++){
var x = i * w; //edited
var y = j * h; //here
//select
doc.selection.select([[x,y],[x+w,y],[x+w,y+h],[x,y+h]]);
//new layer via cut
doc.selection.cut();
var layer = doc.artLayers.add();
doc.paste();
//move
//$.writeln('translate x: '+(y)+', y: '+(x));
// move layer with relative coordinates
// layer.translate(y,x);
// move layer with absolute coordinates
MoveLayerTo( layer, x, y );
doc.activeLayer = l0;
}
}
l0.remove();//remove original layer(now empty)
}
function makeDialog(){
var dialog = new Window('dialog','Slice and Dice');
dialog.frameLocation = [300,300];
dialog.w = dialog.add('edittext',undefined,'Selection width');
dialog.w.prefferedSize = [200,50];
dialog.h = dialog.add('edittext',undefined,'Selection height');
dialog.h.prefferedSize = [200,50];
dialog.c = dialog.add('edittext',undefined,'Grid Columns(V sections)');
dialog.c.prefferedSize = [200,50];
dialog.r = dialog.add('edittext',undefined,'Grid Rows(H sections)');
dialog.r.prefferedSize = [200,50];
dialog.arrange = dialog.add('button',undefined,'Chop Chop');
return dialog;
}
//******************************************
// MOVE LAYER TO
// Author: Max Kielland
//
// Moves layer fLayer to the absolute
// position fX,fY. The unit of fX and fY are
// the same as the ruler setting.
function MoveLayerTo(fLayer,fX,fY) {
var Position = fLayer.bounds;
Position[0] = fX - Position[0];
Position[1] = fY - Position[1];
fLayer.translate(-Position[0],-Position[1]);
}
यदि आप इसे .jsx फ़ाइल के रूप में फ़ोटोशॉप / प्रीसेट / लिपियों में सहेजते हैं, तो आपको फ़ाइल मेनू में लिपियों के माध्यम से इसे एक्सेस करने में सक्षम होना चाहिए। आप अपने कंप्यूटर पर कहीं भी स्क्रिप्ट के साथ फ़ाइल -> लिपियों -> ब्राउज़ ... का उपयोग कर सकते हैं।
यह चार चीजें मांगेगा:
- चयन की चौड़ाई - आप ग्रिड में प्रत्येक ब्लॉक को कितना चौड़ा चाहते हैं
- चयन ऊंचाई - आप ग्रिड के प्रत्येक ब्लॉक को कितना लंबा चाहते हैं
- ग्रिड कॉलम (V सेक्शन) - एक बार विभाजित होने के बाद कितने कॉलम होने चाहिए
- ग्रिड पंक्तियाँ (एच अनुभाग) - एक बार विभाजित होने के बाद कितनी पंक्तियाँ होनी चाहिए
यदि आपको दस्तावेज़ के बारे में कोई त्रुटि मिलती है, जो आपको नहीं मिल रही है, तो आपको इसे चलाने से पहले एक छवि को खोलने की आवश्यकता है।
इस JSX दृष्टिकोण के साथ समस्या यह है, यह बड़े उपखंडों (100x100) के लिए थोड़ा धीमा है।
मुझे लगता है कि यह MATLAB / फ़ोटोशॉप संचार के साथ प्रयास करने के लिए तेज़ होगा, लेकिन मैं अभी के लिए छोड़ दूँगा।
CopyPixels () का उपयोग करके क्रिया 3 में समान लक्ष्य प्राप्त किया और यह बहुत तेज़ है।