2012-11-23 18 views
5

Aşağıdaki şeyi yapmam gerekiyor. Bir adlandırma kuralı kümesinde birden çok png dosyası bulundurmak: 1.png 1_m.png, 2.png 2_m.png (ve benzeri). Png dosyaları aynı genişliğe ve yüksekliğe (320 x 360 px) sahiptir.Dosyaları birleştirme (yan yana) klasörü Photoshop komut dosyaları

1_m.png 1.png dosyaları alıp 1_m.png solda ve sağda 1.png üzerine yerleştirildiği yeni bir dosya oluşturun:

Şimdi komut aşağıdakileri yapmalıdır Bu katmanı bir katmanda birleştirin ve 1_done.png, diyelim bu eylemi klasördeki tüm dosyalarda çalıştıralım.

Bu bir Photoshop betiği olmak zorunda değil Web'de arama yaptım ama yararlı bir çözüm bulamadım. Ayrıca burada taş hiçbir şey ayarlanmamıştır, dosyalar en basit çözümün ne olabileceği farklı klasörlerde olabilir. Benim Photoshop versiyonunuz CS5

cevap

3

Bu script sizin istediğiniz şeyi yapacaktır. Tüm dosyaları bir dizine koyun ve sonra betiği otomatikleştir -> komut dosyasını kullanarak komut dosyasını çalıştırın. Dosya adında bir altyazı bulunmaz ve altyazı ile eşleşir ve ardından eşlenen ad dosyasını ("_m" ile) açın, yan yana koyun ve dosya adına eklenen _done ile kaydedin.

// pref pixels app.preferences.rulerUnits = Units.PIXELS;

var srcDoc = app.activeDocument; 

// call the current document 
var srcDoc = app.activeDocument; 

// set original width and height 
var imageW = srcDoc.width.value; 
var imageH = srcDoc.height.value; 

// get the info out of the source doc 
var fileName = srcDoc.name; 
var docName = fileName.substring(0,fileName.length -4); 
var filePath = srcDoc.path.toString(); 
var fileExt = fileName.substring(fileName.length -4, fileName.length); 

var nameCheck = fileName.substring(0,fileName.indexOf("_")); 

if (nameCheck <1) 
{ 
    // no underscore so we need to open it's namesake 
    // alert(nameCheck) 
    var filePair = filePath + "/" + docName + "_m" + fileExt; 
    openThisFile(filePair) 
    activeDocument.selection.selectAll() 
    activeDocument.selection.copy(); 
    app.activeDocument.close(SaveOptions.DONOTSAVECHANGES); 
    app.activeDocument = srcDoc; 
    activeDocument.resizeCanvas(imageW *2, imageH, AnchorPosition.MIDDLELEFT); 
    selectRect(0, imageW, imageW*2, imageH) 
    activeDocument.paste() 
    activeDocument.flatten(); 
    var newName = filePath + "/" + docName + "_done" + fileExt 
    saveMe(newName) 
} 
    else 
    { 
     app.activeDocument.close(SaveOptions.DONOTSAVECHANGES); 
    } 


function openThisFile(masterFileNameAndPath) 
{ 
var fileRef = new File(masterFileNameAndPath) 
if (fileRef.exists) 
//open that doc 
{ 
    app.open(fileRef); 
} 
else 
{ 
    alert("error opening " + masterFileNameAndPath) 
} 
} 


function selectRect(top, left, right, bottom) 
{ 
    srcDoc.selection.deselect() 
    // ======================================================= 
    var id1 = charIDToTypeID("setd"); 
    var desc1 = new ActionDescriptor(); 
    var id2 = charIDToTypeID("null"); 
    var ref1 = new ActionReference(); 
    var id3 = charIDToTypeID("Chnl"); 
    var id4 = charIDToTypeID("fsel"); 
    ref1.putProperty(id3, id4); 
    desc1.putReference(id2, ref1); 
    var id5 = charIDToTypeID("T "); 
    var desc2 = new ActionDescriptor(); 
    var id6 = charIDToTypeID("Top "); 
    var id7 = charIDToTypeID("#Pxl"); 
    desc2.putUnitDouble(id6, id7, top); 
    var id8 = charIDToTypeID("Left"); 
    var id9 = charIDToTypeID("#Pxl"); 
    desc2.putUnitDouble(id8, id9, left); 
    var id10 = charIDToTypeID("Btom"); 
    var id11 = charIDToTypeID("#Pxl"); 
    desc2.putUnitDouble(id10, id11, bottom); 
    var id12 = charIDToTypeID("Rght"); 
    var id13 = charIDToTypeID("#Pxl"); 
    desc2.putUnitDouble(id12, id13, right); 
    var id16 = charIDToTypeID("Rctn"); 
    desc1.putObject(id5, id16, desc2); 
    executeAction(id1, desc1, DialogModes.NO); 
} 

function saveMe(fPath) 
{ 

// save out the image 
var pngFile = new File(fPath); 
pngSaveOptions = new PNGSaveOptions(); 
pngSaveOptions.embedColorProfile = true; 
pngSaveOptions.formatOptions = FormatOptions.STANDARDBASELINE; 
pngSaveOptions.matte = MatteType.NONE; pngSaveOptions.quality = 1; 
activeDocument.saveAs(pngFile, pngSaveOptions, false, Extension.LOWERCASE); 

// close that saved png 
app.activeDocument.close() 
} 
+0

teşekkür ederiz. Mükemmel çalışıyor. Ben sadece batch -> script komutunu bulamıyorum Sadece Photoshop'un genişletilmiş sürümünde mi? – adam

+0

Öncelikle komut dosyasını bir eylem olarak kaydedin. Eylem -> Yeni Eylem (bir isim verin), kayıt yapın ve ardından STOP kaydı - bu genellikle önemlidir. ve sonra komut dosyasını toplu iş dosyasından çağırın. CS5 hakkında emin değilim - ama kesinlikle CS2 altında File -> Automate -> Batch altında bulacaksınız, daha sonra içinde bulunduğu klasörü seçin. Çalıştırmak için Tamam. –

+0

Bu çalışmalara şükürler olsun. – adam

2

Windows, OSX ve Linux için ücretsiz olarak kullanılabilir Imagemagick bu yapardın - yine en Linux dağıtımlarının yüklü aslında.

bunun püf noktası temelde böyle, yan yana iki resim yan eklemek için ImageMagick en convert komutunu kullanmaktır:

convert left.png right.png +append out.png 

Yani script şöyle

- (bunun yaklaşık yarısı yorumlardır):

#!/bin/bash 
for i in [0-9]*_m.png; do 
    # Deduce name of left image 
    left="$i" 
    # Deduce name of right image 
    right="${i/_m/}" 
    # Deduce name of output image 
    done="${i/_m/_done}" 
    # Merge the little devils 
    convert "$left" "$right" +append "$done" 
done 

böyle görüntülerle başlatırsanız:

enter image description here

ve

enter image description here

Tüm çiftleri için bu üretecektir: komut dosyası için

enter image description here