1

次のことを試みているスクリプトがあります。

  • すべての画像の InDesign ドキュメントをスキャンする
  • BridgeTalk  オブジェクトを介してすべての画像を Photoshop に送信する  
  • すべての画像のサイズを 600px 幅に変更します (アスペクト比を数学的に維持します)。
  • Photoshop からすべての画像を新しいフォルダーにエクスポートする

1 つの画像のサイズが変更される前に Photoshop がクラッシュするため、各画像の DPI をプログラムで調整する必要があるようです。このエラーは、一時メモリがこのスクリプトによって過負荷になっていることを示唆しており、画質やサイズに関係があると思います...エラーメッセージは次のとおりです。

一般的な Photoshop エラーが発生しました。この機能は、このバージョンの Photoshop では使用できない場合があります。
行 1 のエラー:
スクラッチ ディスクがいっぱいであるため、コマンドを完了できませんでした。




画像サイズを変換する関連コードは次のとおりです。

function resaveInPS(imagePaths, imagesFolder)
{
    /*
     * NOTE:  no single-line comments are allowed in this function, because it is not read line-by-line by BridgeTalk, but as a single String;
     *        only multi-line comments will work, because they are terminated at each end
     */

    BridgeTalk.bringToFront("photoshop"); /* switch view from InDesign to Photoshop */

    app.displayDialogs = DialogModes.NO; /* Photoshop statement, prevents status alerts from interrupting */

    var imagePath = "";
    var fileName = "";
    var largerImage = "";

    for(var i = 0; i < imagePaths.length; i++)
    {
        imagePath = imagePaths[i].fullName;
        fileName = imagePaths[i].name;
        largerImage = fileName.substr(0, fileName.length - 4); /* getting rid of the file extension:  Photoshop will handle the file extension */

        var photoshopDoc = "";
        photoshopDoc = app.open(new File(imagePath) );

        var currentWidth = photoshopDoc.width; /* in inches */
        var currentHeight = photoshopDoc.height; /* in inches */

        currentWidth.convert("px"); /* now in pixels */
        currentHeight.convert("px"); /* now in pixels */

        var newWidth = 600; /* defining the desired exported image width here */
        var ratio = newWidth / currentWidth;
        var newHeight = ratio * currentHeight; /* maintaining aspect ratio of the resized image's height here */

        alert("The currentHeight is " + currentHeight + ".\n\nThe ratio is " + ratio + ".\n\nThe newHeight is " + newHeight + ".");

        photoshopDoc.resizeImage(newHeight, newWidth); /* (height, width) */
        photoshopDoc.resizeCanvas(newHeight, newWidth); /* (height, width) */

        var saveOptions = new TiffSaveOptions(); /* handling the file extension here */
        photoshopDoc.saveAs(new File(imagesFolder + "/" + largerImage), saveOptions); /* saving the new image in the folder here, with the file extension */
        photoshopDoc.close(SaveOptions.DONOTSAVECHANGES); /* close the Photoshop document without saving */
        app.purge(PurgeTarget.ALLCACHES); /* clears the clipboard, history, and undo cache in Photoshop; Note: does NOT delete the temporary files! */

    } /* end of for loop */

    app.displayDialogs = DialogModes.ALL; /* resume normal dialogs after saving the file and closing the document */
    app.purge(PurgeTarget.ALLCACHES); /* clears the clipboard, history and undo cache in Photoshop; Note:  does NOT delete the temporary files! */

} // end of function ResaveInPS


 -エラーがまだ発生しているため、ステートメントの使用法は  app.purge(PurgeTarget.ALLCACHES)  あまり効果がないようです...

4

1 に答える 1

2

したがって、型強制が単位値に適用されると誤って想定していましたが、「ピクセル」はデフォルトの Javascript タイプではないため、もちろんそうではありません。 に適用    し  

ないと、比率はタイプに強制され  ます  (ただし  、「ピクセル」ユニット タイプでインスタンス化されます)。また、    タイプ  はそのままです。 new UnitValuevar ratioNumbercurrentWidth  var newWidthNumber


var currentWidth  行で始まり、で終わる   修正されたコードは  次のresizeCanvas とおりです。

        var currentWidth = photoshopDoc.width; /* in inches */
        var currentHeight = photoshopDoc.height; /* in inches */

        currentWidth.convert("px"); /* now in pixels */
        currentHeight.convert("px"); /* now in pixels */


        var newWidth = new UnitValue(600, "px"); /* defining the desired exported image width here */
        var ratio = new UnitValue(newWidth / currentWidth, "px");
        var newHeight = new UnitValue(ratio * currentHeight, "px"); /* maintaining aspect ratio of the resized image's height here */

        /*alert("The currentHeight is " + currentHeight + ".\n\nThe ratio is " + ratio + ".\n\nThe newHeight is " + newHeight + ".");*/

        photoshopDoc.resizeImage(newWidth, newHeight); /* (width, height) */
        photoshopDoc.resizeCanvas(newWidth, newHeight); /* (width, height) */


また、メソッド  resizeImage  と  resizeCanvas  逆方向のパラメーターを取得しました。これは両方の正しい順序です:   (width, height).


-- 正しい方向に向けてくれた @Mark に感謝します。

于 2012-07-16T20:10:30.560 に答える