2017-01-16 5 views
1

私は配列をループしてサイズを変更し、ファイル名を付加し、画像を保存しPhotoShopのために書かれたJavaScriptを持っています。スクリプトは動作しますが、画質がひどく低下していると私は、画像品質を維持するためのオプションを微調整する方法を見つけ出すように見えることはできません。私の元の画像はプロフェッショナルな写真@ 3871x2571ピクセルなので、品質の差は明らかです。PhotoshopのCC 2017スクリプトの書き出し画質

JS:OPに私のコメントを1として

doc = app.activeDocument; 
doc.changeMode(ChangeMode.RGB); 
var docName = doc.name; 
var docTitle = docName.slice(0, -4); 

var options = new ExportOptionsSaveForWeb(); 
options.quality = 100; 
options.format = SaveDocumentType.JPEG; 
options.optimized = true; 

var sizes = new Array(); 
sizes[0] = 'sm'; 
sizes[1] = 'md'; 
sizes[2] = 'lg'; 
sizes[3] = 'xl'; 

//2x 
for(var i = 0; i < 4; i++) { 
    var widthVal = ''; 
    if(sizes[i] == 'sm') { widthVal = '480px'; } 
    if(sizes[i] == 'md') { widthVal = '960px'; } 
    if(sizes[i] == 'lg') { widthVal = '1440px'; } 
    if(sizes[i] == 'xl') { widthVal = '1920px'; } 

    var newName = docTitle+'_'+sizes[i]+'@2x.jpg'; 

    doc.resizeImage(widthVal,null, null, ResampleMethod.BICUBIC,0); 

    doc.exportDocument(File(doc.path+'/'+newName), ExportType.SAVEFORWEB, options); 
} 

//1x 
for(var i = 0; i < 4; i++) { 
    var widthVal = ''; 
    if(sizes[i] == 'sm') { widthVal = '240px'; } 
    if(sizes[i] == 'md') { widthVal = '480px'; } 
    if(sizes[i] == 'lg') { widthVal = '720px'; } 
    if(sizes[i] == 'xl') { widthVal = '960px'; } 
    var newName = docTitle+'_'+sizes[i]+'.jpg'; 

    doc.resizeImage(widthVal,null, null, ResampleMethod.BICUBIC,0); 

    doc.exportDocument(File(doc.path+'/'+newName), ExportType.SAVEFORWEB, options); 
} 
+0

最初の反復、画像が480に縮小されてから、その後のパスがサイズを増やすためですが、最初の縮小に基づいていますか?そのような場合、解決策は、元の文書から開始することですが、私はそれをどのように行うのですか? – sinrise

答えて

0

、確かに問題でした。私は、このループを各ループの内側で処理するためにファイルを開いたり閉じたりすることで、この作業を期待通りに行うことができました。それはより遅くなりますが、各ファイルを1つずつ保存するよりも速くなります!

必ずしも問題が、私は最初のファイルの入力を求めることで、このコードを改善するのが大好きです。 :D

var options = new ExportOptionsSaveForWeb(); 
    options.quality = 100; 
    options.format = SaveDocumentType.JPEG; 
    options.optimized = true; 

    var sizes = new Array(); 
    sizes[3] = 'sm'; 
    sizes[2] = 'md'; 
    sizes[1] = 'lg'; 
    sizes[0] = 'xl'; 

    //2x 
    for(var i = 0; i < 4; i++) { 
     docFile = File("[full system path to file]"); 
     doc = open(docFile); 
     doc.changeMode(ChangeMode.RGB); 
     var docName = doc.name; 
     var docTitle = docName.slice(0, -4); 

     var widthVal = ''; 
     if(sizes[i] == 'xl') { widthVal = '1920px'; } 
     if(sizes[i] == 'lg') { widthVal = '1440px'; } 
     if(sizes[i] == 'md') { widthVal = '960px'; } 
     if(sizes[i] == 'sm') { widthVal = '480px'; } 

     var newName = docTitle+'_'+sizes[i]+'@2x.jpg'; 

     doc.resizeImage(widthVal,null, 3000, ResampleMethod.BICUBIC,0); 

     doc.exportDocument(File(doc.path+'/'+newName), ExportType.SAVEFORWEB, options); 

     doc.close(SaveOptions.DONOTSAVECHANGES); 
    } 

    //1x 
    for(var i = 0; i < 4; i++) { 
     docFile = File("[full system path to file]"); 
     doc = open(docFile); 
     doc.changeMode(ChangeMode.RGB); 
     var docName = doc.name; 
     var docTitle = docName.slice(0, -4); 

     var widthVal = ''; 
     if(sizes[i] == 'xl') { widthVal = '960px'; } 
     if(sizes[i] == 'lg') { widthVal = '720px'; } 
     if(sizes[i] == 'md') { widthVal = '480px'; } 
     if(sizes[i] == 'sm') { widthVal = '240px'; } 
     var newName = docTitle+'_'+sizes[i]+'.jpg'; 

     doc.resizeImage(widthVal,null, 3000, ResampleMethod.BICUBIC,0); 

     doc.exportDocument(File(doc.path+'/'+newName), ExportType.SAVEFORWEB, options); 

     doc.close(SaveOptions.DONOTSAVECHANGES); 
    } 
関連する問題