Photoshop JavaScript Проблемы сценарияJavascript

Форум по Javascript
Ответить
Anonymous
 Photoshop JavaScript Проблемы сценария

Сообщение Anonymous »

Я работаю над двумя сценариями Photoshop JavaScript (JSX), используя Photoshop 23.1.1 в Windows для автоматизации обработки спрайта. Первый сценарий направлен на то, чтобы подсчитать уникальные цвета в рамках спрайта (извлеченные с помощью версии 19 -го беспроигрышного SpriteSher) путем преобразования изображений в режим индексированного цвета и результатов регистрации в C:/Video Factory/color_log.txt. Второй скрипт предназначен для открытия спрайтов и центра их на холсте 512x512, опционально обрабатывая несколько файлов из папки. Оба сценария сталкиваются с постоянными ошибками, и мне нужна помощь в разрешении их. цвета Получил ошибку 8107: Указанное преобразование в режим индексированного цвета требует вариантов преобразования. />3. IndexedColormode объект: попытка var options = new IndexedColormode (); Options.palette = palette.exact; options.dither = dither.none; Options.colors = 256;, но получил ошибку 22: IndexedColormode не имеет конструктора. executeAction(charIDToTypeID("CnvM"), new ActionDescriptor().putClass(charIDToTypeID("T "), charIDToTypeID("IndC")), DialogModes.NO), but it also failed with Error 8107.
Current Script (Color Count):
#target photoshop

function getUniqueColorCount(doc) {
if (doc.mode != ChangeMode.RGB) {
doc.changeMode(ChangeMode.RGB);
}
var idconvertMode = charIDToTypeID("CnvM");
var desc = new ActionDescriptor();
var idtoMode = charIDToTypeID("T ");
desc.putClass(idtoMode, charIDToTypeID("IndC"));
executeAction(idconvertMode, desc, DialogModes.NO);
var colorTable = doc.colorTable;
return colorTable.length;
}

function processSprites(folder) {
var logFile = new File("C:/Video Factory/color_log.txt");
logFile.open("w");
logFile.writeln("Filename\tColor Count");
var files = folder.getFiles(function(file) {
return file instanceof File && (file.name.match(/\.(jpg|jpeg|png|tiff)$/i));
});
if (files.length === 0) {
alert("No image files found in the selected folder.");
return;
}
for (var i = 0; i < files.length; i++) {
var doc = app.open(files);
try {
var colorCount = getUniqueColorCount(doc);
logFile.writeln(files.name + "\t" + colorCount);
} catch (e) {
logFile.writeln(files.name + "\tError: " + e.message);
}
doc.close(SaveOptions.DONOTSAVECHANGES);
}
logFile.close();
}

var folder = Folder.selectDialog("Select the folder with sprites");
if (folder != null) {
processSprites(folder);
} else {
alert("No folder selected. Exiting script.");
}
< /code>
Проблемы: < /p>

Ошибка 8107 сохраняется, что указывает на то, что Photoshop требует вариантов преобразования, которые я не могу успешно предоставить. < /p>
< /li>
Руководство (изображение> режим> Индексированный цвет), но подмолт для настройки, которые не могут. /> < /li>
API, по-видимому, отвергает как объектные опции, так и менеджер действий для этой цели. < /p>
< /li>
< /ul>
Выпуск 2: Центрирующиеся сорты на 512x512 canvas < /p>
То, что я попробовал:
Sound Spript Script: Script Spript: 512x512 Canvas и центр его с использованием doc.activelayer.translate ((doc.width - spritewidth) / 2, (doc.height - spriteheight) / 2) после копирования и вставки. Это сработало для одного файла, но требовал жестко -кодированного пути.
Пытательская обработка: изменил скрипт, чтобы провести через папку с помощью папки. SelectDialog и обработать несколько спрайтов. Скрипт работает, но не может правильно центрировать спрайты, часто размещая их за центром или бросает ошибки, такие как ошибка 8802: общая ошибка Photoshop при обработке нескольких файлов.
Текущий скрипт (Canvas Centring): < /p>
#target photoshop

function createCanvas() {
var doc = app.documents.add(512, 512, 72, "Sprite Canvas", NewDocumentMode.RGB, DocumentFill.TRANSPARENT);
return doc;
}

function openSpriteAndPlace(spritePath) {
var sprite = app.open(new File(spritePath));
var doc = createCanvas();
var spriteWidth = sprite.width;
var spriteHeight = sprite.height;
var x = (doc.width - spriteWidth) / 2;
var y = (doc.height - spriteHeight) / 2;
sprite.selection.selectAll();
sprite.selection.copy();
doc.paste();
doc.activeLayer.translate(x, y);
sprite.close(SaveOptions.DONOTSAVECHANGES);
}

var folder = Folder.selectDialog("Select the folder with sprites");
if (folder != null) {
var files = folder.getFiles(function(file) {
return file instanceof File && (file.name.match(/\.(jpg|jpeg|png|tiff)$/i));
});
for (var i = 0; i < files.length; i++) {
openSpriteAndPlace(files);
}
}
< /code>
Проблемы:
Проблемы с центрированием: метод перевода иногда смешивает спрайты, особенно с различными размерами, и сценарий не всегда поддерживает новый холст на Sprite в режиме партий, что приводит к перекрытию. /> Нет экспорта: в скрипте отсутствует функция сохранения, и добавление Doc.SaveEs с пользовательским именем файла вызывает дальнейшие ошибки (например, ошибка 1302: файл уже существует без перезагрузки). < /p>
Вопросы:
Color Count: Как я могу исправить варианты конверсии в Changemode или действие, чтобы преобразовать в режиме индекса, не обработанной. /> Есть ли способ имитировать настройки ручного диалога в скрипте? Лучшие подходы (например, запись действий) для выполнения этих задач в сценариях Photoshop?

Подробнее здесь: https://stackoverflow.com/questions/797 ... ipt-issues
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»