Решено : Всем спасибо за помощь! Скрипт Сергея Крицкого работает для экспорта раскадровок с последовательным именем файла.
На днях я нашел сценарий от TunaMaxx и подумал, что очень полезно экспортировать свои раскадровки.
Прямо сейчас он экспортирует весь первый столбец, затем 2-й столбец, затем 3-й и 4-й столбцы. В итоге мои доски помечены в неправильном порядке: «1, 5, 9, 13», затем «2, 6, 10, 14» и так далее. (изображения ниже)
Мне было интересно, возможно ли каким-то образом экспортировать его по строкам, чтобы мои доски сохранялись / назывались как «1, 2, 3, 4 .. и т. Д.?» Кажется, это не имеет большого значения, но когда я экспортирую более 200 досок, очень сложно вернуться и реорганизовать все это. (Без скрипта я прибегаю к созданию направляющих линий и использованию инструмента «Срез».)
Я включил скриншоты ниже того, что я ищу в фотошопе и как это выглядит после экспорта.
Ниже представлен JPEG, с которым я работаю. Каждый кадр имеет ширину 2000 пикселей и высоту 1090 пикселей. Смещение по оси x составляет 200 пикселей, а по оси y — 100 пикселей.
На фото ниже показано, что происходит, когда я пытаюсь экспортировать
Попробуй это:
// Alter these as needed
var cellWidth = 2000; // The width, in px, of your image cell
var cellHeight = 1090; // The height, in px, of your image cell
var xOffset = 200; // The space, in px, between each cell in a row
var yOffset = 100; // The space, in px, between each row. Set to 0 for traditional checker board effect
var options = new ExportOptionsSaveForWeb();
options.format = SaveDocumentType.JPEG;
options.quality = 100;
// Don't change these unless you know why you should! :)
var doc = app.activeDocument;
var dname = doc.name.substr(0,doc.name.length-4);
var dir = doc.path.toString()+"/";
var rowShift = true;
var imageWidth = activeDocument.width.as('px');
var imageHeight = activeDocument.height.as('px');
// Store the current rulerUnits for later. We're going to change
// it to pixels for now, and we want to change it back later.
var myRulerUnits = app.preferences.rulerUnits;
// Set rulerUnits to pixels
app.preferences.rulerUnits = Units.PIXELS;
// Find the "Background"
var layerRef = doc.artLayers.getByName("Background");
// Set our "Background" to be a Layer
layerRef.isBackgroundLayer = false;
// Reduce the Canvas size to our cell size
doc.resizeCanvas(cellWidth, cellHeight, AnchorPosition.TOPLEFT);
var totalOffset = 0;
var xMovement = 0;
var yMovement = 0;
// Do the magic
for (var y = 0; y < numberOfRows(); y++)
{
totalOffset = 0;
for (var x = 0; x < numberOfCells(); x++)
{
if (x == 0)
{
xMovement = 0;
totalOffset += xMovement;
yMovement = yOffset
}
else
{
xMovement = cellWidth;
totalOffset += (xMovement+xOffset);
yMovement = 0
}
// Offset the layer into our Canvas "window"
layerRef.applyOffset(-(xMovement+xOffset), -yMovement, OffsetUndefinedAreas.WRAPAROUND);
saveCell(y,x);
};
// Offset the layer back to the left and down one row
layerRef.applyOffset(totalOffset+xOffset, -(cellHeight), OffsetUndefinedAreas.WRAPAROUND);
// Flip the rowShift. If it was true, make it false and vice versa.
rowShift = !rowShift;
};
// Calculate number of cells per row. May change depending in rowShift, etc
function numberOfCells()
{
var theWidth = imageWidth;
if (rowShift == true)
{
var theWidth = theWidth - xOffset;
}
return Math.floor((theWidth + xOffset) / (cellWidth + xOffset));
}
// Calculate number of rows
function numberOfRows()
{
return Math.floor((imageHeight + yOffset) / (cellHeight + yOffset));
}
// Pad the cell x and y numbers for proper sorting
function pad(num, size)
{
var s = "000000000" + num;
return s.substr(s.length-size);
}
// Actually save, or really "Save For Web" the cell
function saveCell(x, y)
{
var nname = dname + "_" + pad((x + 1), 3) + "_" + pad((y + 1), 3);
doc.exportDocument (new File(dir + "/" + nname + ".jpg"), ExportType.SAVEFORWEB, options);
}
// Reset the ruler units
app.preferences.rulerUnits = myRulerUnits;
PS вам нужно, чтобы кадры имели строку/столбец, или вы хотите, чтобы они имели последовательные имена?
Это работает?? :)
// Alter these as needed
var cellWidth = 240; // The width, in px, of your image cell
var cellHeight = 240; // The height, in px, of your image cell
var xOffset = 240; // The space, in px, between each cell in a row
var yOffset = 240; // The space, in px, between each row. Set to 0 for traditional checker board effect
var options = new ExportOptionsSaveForWeb();
options.format = SaveDocumentType.JPEG;
options.quality = 75;
// Don't change these unless you know why you should! :)
var doc = app.activeDocument;
var dname = doc.name.substr(0,doc.name.length-4);
var dir = doc.path.toString()+"/";
var rowShift = true;
var imageWidth = activeDocument.width.as('px');
var imageHeight = activeDocument.height.as('px');
// Store the current rulerUnits for later. We're going to change
// it to pixels for now, and we want to change it back later.
var myRulerUnits = app.preferences.rulerUnits;
// Set rulerUnits to pixels
app.preferences.rulerUnits = Units.PIXELS;
// Find the "Background"
var layerRef = doc.artLayers.getByName("Background");
// Set our "Background" to be a Layer
layerRef.isBackgroundLayer = false;
// Reduce the Canvas size to our cell size
doc.resizeCanvas(cellWidth, cellHeight, AnchorPosition.TOPLEFT);
var totalOffset = 0;
var xMovement = 0;
// Do the magic
for (var y = 0; y < numberOfRows(); y++)
{
totalOffset = 0;
for (var x = 0; x < numberOfCells(); x++)
{
if (x == 0)
{
xMovement = (rowShift) ? xOffset : 0;
}
else
{
xMovement = cellWidth + xOffset;
}
totalOffset += xMovement;
// Offset the layer into our Canvas "window"
layerRef.applyOffset(-(xMovement), 0, OffsetUndefinedAreas.WRAPAROUND);
saveCell(x,y);
};
// Offset the layer back to the left and down one row
layerRef.applyOffset(totalOffset, -(cellHeight + yOffset), OffsetUndefinedAreas.WRAPAROUND);
// Flip the rowShift. If it was true, make it false and vice versa.
rowShift = !rowShift;
};
// Calculate number of cells per row. May change depending in rowShift, etc
function numberOfCells()
{
var theWidth = imageWidth;
if (rowShift == true)
{
var theWidth = theWidth - xOffset;
}
return Math.floor((theWidth + xOffset) / (cellWidth + xOffset));
}
// Calculate number of rows
function numberOfRows()
{
return Math.floor((imageHeight + yOffset) / (cellHeight + yOffset));
}
// Pad the cell x and y numbers for proper sorting
function pad(num, size)
{
var s = "000000000" + num;
return s.substr(s.length-size);
}
// Actually save, or really "Save For Web" the cell
function saveCell(x, y)
{
var nname = dname + "_" + pad((y + 1), 3) + "_" + pad((x + 1), 3);
doc.exportDocument (new File(dir + "/" + nname + ".jpg"), ExportType.SAVEFORWEB, options);
}
// Reset the ruler units
app.preferences.rulerUnits = myRulerUnits;
В коде TunaMaxx вы заметите эту функцию:
// Actually save, or really "Save For Web" the cell
function saveCell(x, y)
{
var nname = dname + "_" + pad((x + 1), 3) + "_" + pad((y + 1), 3);
doc.exportDocument (new File(dir + "/" + nname + ".jpg"), ExportType.SAVEFORWEB, options);
}
Он вызывается ранее в коде:
saveCell(x,y);
Похоже, что вам нужно просто поменять местами x и y, чтобы иметь приращения по горизонтали.
попробуй поменять saveCell(x,y);
сsaveCell(y,x);
Единственное, что нужно иметь в виду, это настроить их по мере необходимости:
var xOffset = 240; // The space, in px, between each cell in a row
var yOffset = 240; // The space, in px, between each row. Set to 0 for traditional checker board effect
(Помню, изначально мне нужна была диагонально смещенная сетка)
cellWidth
ли cellHeight
размеры вашего одиночного изображения в более крупной композиции? Как выглядит исходный документ?
Мистер Онлайн
Пара Ди