0 Members and 2 Guests are viewing this topic.
Кто-нибудь сталкивался с подобной проблемой при работе со скриптами в фотошопе?
function WaitForRedraw(){var eventWait = charIDToTypeID("Wait")var enumRedrawComplete = charIDToTypeID("RdCm")var typeState = charIDToTypeID("Stte")var keyState = charIDToTypeID("Stte")var desc = new ActionDescriptor()desc.putEnumerated(keyState, typeState, enumRedrawComplete)executeAction(eventWait, desc, DialogModes.NO)}
Ага! Наступил на те же грабли. Это возникает при трансформации больших текстур., для 4К особенно актуально.Тогда я нашёл вот такую функцию, теперь что-то в инете найти не могу:Read more...Code: [Select]function WaitForRedraw(){var eventWait = charIDToTypeID("Wait")var enumRedrawComplete = charIDToTypeID("RdCm")var typeState = charIDToTypeID("Stte")var keyState = charIDToTypeID("Stte")var desc = new ActionDescriptor()desc.putEnumerated(keyState, typeState, enumRedrawComplete)executeAction(eventWait, desc, DialogModes.NO)}Мне в ней мало что понятно, но она действительно работает. Вызывать её надо после трансформации до копирования растра.Скрипт я так и не офрмил, но тонарм раскадрироваь только так и получилось, хотя скрипт работает оооочень медленно...
Вызывать её надо после трансформации до копирования растра.
Все функции обычно помещаются в начало скрипта, а
// Копируемая область изображения должна быть выделена в документе!// Устанавливаем значенияvar Angle = 360; // Угол полного поворота в градусахvar Frames = 5; // Количество кадровvar CW = "-"; // "-" минус, если поворот против часовой стрелки, "" в противном случаеif (app.documents.length > 0) { app.preferences.rulerUnits = Units.PIXELS; var srcDoc = app.activeDocument; var B = srcDoc.selection.bounds; // Определяем размеры текущего выделения var W = B[2] - B[0]; var H = B[3] - B[1]; // Создаем новый документ нужных размеров var pasteDoc = app.documents.add(W, H, srcDoc.resolution, "Frames", NewDocumentMode.RGB, DocumentFill.TRANSPARENT); // Собственно цикл for ( var i = 0; i < Frames; i++ ) { app.activeDocument = srcDoc; srcDoc.selection.select(Array (Array(B[0], B[1]), Array(B[2], B[1]), Array(B[2], B[3]), Array(B[0], B[3])), SelectionType.REPLACE, 0, true); srcDoc.selection.copy(1); // Копируем выделенное srcDoc.activeLayer.rotate(CW + Angle/Frames); app.activeDocument = pasteDoc; pasteDoc.selection.select(Array (Array(W, 0), Array(W, 0), Array(W, H), Array(W, H)), SelectionType.REPLACE, 0, false); function WaitForRedraw(){var eventWait = charIDToTypeID("Wait")var enumRedrawComplete = charIDToTypeID("RdCm")var typeState = charIDToTypeID("Stte")var keyState = charIDToTypeID("Stte")var desc = new ActionDescriptor()desc.putEnumerated(keyState, typeState, enumRedrawComplete)executeAction(eventWait, desc, DialogModes.NO)} pasteDoc.paste(); // Вставляем изображение из буфера // Повторяем операцию нужное количество раз }}
В том месте должен быть вызов этой функции WaitForRedraw(), а само её тело в начале скрипта.
function WaitForRedraw(){var eventWait = charIDToTypeID("Wait")var enumRedrawComplete = charIDToTypeID("RdCm")var typeState = charIDToTypeID("Stte")var keyState = charIDToTypeID("Stte")var desc = new ActionDescriptor()desc.putEnumerated(keyState, typeState, enumRedrawComplete)executeAction(eventWait, desc, DialogModes.NO)}var Angle = 360; // Угол полного поворота в градусахvar Frames = 5; // Количество кадровvar CW = "-"; // "-" минус, если поворот против часовой стрелки, "" в противном случаеif (app.documents.length > 0) { app.preferences.rulerUnits = Units.PIXELS; var srcDoc = app.activeDocument; var B = srcDoc.selection.bounds; var W = B[2] - B[0]; var H = B[3] - B[1]; var pasteDoc = app.documents.add(W, H, srcDoc.resolution, "Frames", NewDocumentMode.RGB, DocumentFill.TRANSPARENT); for ( var i = 0; i < Frames; i++ ) { app.activeDocument = srcDoc; srcDoc.selection.select(Array (Array(B[0], B[1]), Array(B[2], B[1]), Array(B[2], B[3]), Array(B[0], B[3])), SelectionType.REPLACE, 0, true); srcDoc.selection.copy(1); srcDoc.activeLayer.rotate(CW + Angle/Frames); app.activeDocument = pasteDoc; pasteDoc.selection.select(Array (Array(W, 0), Array(W, 0), Array(W, H), Array(W, H)), SelectionType.REPLACE, 0, false); WaitForRedraw() pasteDoc.paste(); }}
// Копируемая область изображения должна быть выделена в документе!// Устанавливаем значенияfunction WaitForRedraw(){var eventWait = charIDToTypeID("Wait")var enumRedrawComplete = charIDToTypeID("RdCm")var typeState = charIDToTypeID("Stte")var keyState = charIDToTypeID("Stte")var desc = new ActionDescriptor()desc.putEnumerated(keyState, typeState, enumRedrawComplete)executeAction(eventWait, desc, DialogModes.NO)}var Angle = 360; // Угол полного поворота в градусахvar Frames = 5; // Количество кадровvar CW = "-"; // "-" минус, если поворот против часовой стрелки, "" в противном случаеif (app.documents.length > 0) { app.preferences.rulerUnits = Units.PIXELS; var srcDoc = app.activeDocument; var B = srcDoc.selection.bounds; // Определяем размеры текущего выделения var W = B[2] - B[0]; var H = B[3] - B[1]; // Создаем новый документ нужных размеров var pasteDoc = app.documents.add(W, H, srcDoc.resolution, "Frames", NewDocumentMode.RGB, DocumentFill.TRANSPARENT); // Собственно цикл for ( var i = 0; i < Frames; i++ ) { app.activeDocument = srcDoc; srcDoc.selection.select(Array (Array(B[0], B[1]), Array(B[2], B[1]), Array(B[2], B[3]), Array(B[0], B[3])), SelectionType.REPLACE, 0, true); srcDoc.selection.copy(1); // Копируем выделенное srcDoc.activeLayer.rotate(CW + Angle/Frames); WaitForRedraw(); app.activeDocument = pasteDoc; pasteDoc.selection.select(Array (Array(W, 0), Array(W, 0), Array(W, H), Array(W, H)), SelectionType.REPLACE, 0, false); // Повторяем операцию нужное количество раз }}
Всё-таки логичнее после деформации, чтоб процесс полностью завершился