كيف يمكنني تركيز وثيقة أخرى مع البرمجة البرمجة البرمجية لبرنامج Photoshop JavaScript؟

StackOverflow https://stackoverflow.com/questions/3122863

سؤال

هذا البرنامج النصي التالي يفعل ما أحتاجه تقريبًا. ما أحاول القيام به هو الذهاب من خلال المستندات المفتوحة ، 139 منها ، وإنقاذها كـ JPEG. ومع ذلك ، فإن ما ينقصه هو الانتقال من وثيقة مفتوحة إلى أخرى ، لذلك حفظ نفس الصورة على مدى 139 مرة. تصورت doc.close() من شأنه أن يغلق المستند المفتوح ويعطي تركيزًا جديدًا ، لكنه لا يفعل ذلك.

هذا هو الرمز:

var destination = "C:/Documents and Settings/Administrator/My Documents/small images"
for(var i = 0; i < 5; i++)
{
    doc = documents[i];
    name_ = doc.name.substring(0, doc.name.indexOf('.'))
    saveForWebPNG(destination, name_);
    doc.close();
}

function saveForWebPNG(outputFolderStr, filename)
{
    var opts, file;
    opts = new ExportOptionsSaveForWeb();
    opts.format = SaveDocumentType.JPEG;
    opts.quality = 60;
    if (filename.length > 27) {
        file = new File(outputFolderStr + "/temp.jpg");
        activeDocument.exportDocument(file, ExportType.SAVEFORWEB, opts);
        file.rename(filename + ".jpg");
    }
    else {
        file = new File(outputFolderStr + "/" + filename + ".jpg");
        activeDocument.exportDocument(file, ExportType.SAVEFORWEB, opts);
    }
}
هل كانت مفيدة؟

المحلول

بحسب ال Adobe Photoshop CS2 دليل البرمجة النصية JavaScript يبدو أنك بحاجة إلى تعيين إلى Application.activeDocument خاصية لجعل ذلك الوثيقة المحددة حاليًا لأي إجراءات. هذا أمر منطقي لأنك تستخدم تلك الخاصية في saveForWebPNG وظيفة دون تنشيط الوثيقة بشكل صريح في المكررة في الكتلة الأولى. قد يكون الأمر بسيطًا مثل التغيير التالي:

for (var i = 0; i < 5; i++) {
  var doc = documents[i];
  app.activeDocument = doc; // Select that document.
  var name = doc.name.substring(0, doc.name.indexOf('.'))
  saveForWebPNG(destination, name);
  doc.close();
}

ومع ذلك ، ليس لدي نسخة من Photoshop ولم أتحقق من هذا الحل.

نصائح أخرى

أعلم أن هذا متأخر كثيرًا ، لكنني صادفت هذا السؤال وأشعر أنني قد يكون لديّ حل قد يتمكن شخص ما على الطريق. لذلك هنا يذهب.

حل واحد هو ضبط الحلقة. دعنا نقول أن هناك 5 مستندات مفتوحة. app.documents.length سيكون 5. عند إغلاق واحد ، يكون الطول الآن 4 ، ثم 3 ، وما إلى ذلك. أنا أحسب كـ app.documents.Length يتناقص. عندما i = 3 ، app.documents.length = 2. أعتقد أن التكرار إلى الوراء سيفعل الخدعة.

for (i = app.documents.length - 1; i >= 0; i--) { ... }

+1 لحل JBIZ. لم أتمكن من معرفة سبب عدم اكتمال حلقتي.

for (i=app.documents.length-1; i >= 0; i--) {
  doc = app.documents[i];
  app.activeDocument = doc;

  ...
  do whatever you need, save & close
  ...
}

app.documents.length يصبح أقصر مع كل التكرار على الرغم من الحلقة إذا قمت بإغلاق المستند عند الانتهاء.

تريد إغلاق المستند الحالي المحدد (أو النشط):

app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top