我们正在制作一个问答游戏。我们在Google云端硬盘电子表格上有一个问题库。我们有一位设计师在Photoshop中为问题卡制作了通用设计。
现在,我们能通过某些脚本,代码或任何其他自动化流程以某种方式将问题及相应的答案转移到此设计中吗?
我知道有一个名为PhotoshopScript的东西,值得仔细研究一下吗?
答案 0 :(得分:0)
是的,可以做到。此视频的示例是类似的内容:https://www.youtube.com/watch?v=4SJxl4vAbqI
您应该可以在此视频后执行此操作。脚本实际上是在Excel中完成的,通过api调用访问Photoshop。在Excel上按Alt + F11打开编程界面。
答案 1 :(得分:0)
我对自己有一点时间,所以我很快就写了一些基本结构,你可能需要它从(本地)csv中加载数据并在photoshop中将其转换为文本。这足以让你开始,即使它只是一个问题。
CSV如下: 1 Gwen Stefani的真名是什么? Bob Gwendoline StefaniGwenRenéeStefaniGwen Stacey C
photoshop_script如下:
var wordData = "pop_quiz.csv";
var dataPath = "C:\\temp";
var myStr = readIt(dataPath, wordData);
var quizArr = myStr.split("\t");
var question = "Question " + quizArr[0] + "\n" + quizArr[1];
var choice = "A: " + quizArr[2] + "\nB: " + quizArr[3] + "\nC: " + quizArr[4] + "\nD: " + quizArr[5];
var answer = "Answer: " + quizArr[6];
// create a document to work with
var docRef = app.documents.add(300, 150, 72, "Quiz Question");
var srcDoc = app.activeDocument;
// adjust text because photoshop dones
// old school new lines
question = replaceNewLine(question);
choice = replaceNewLine(choice);
// write question as photoshop text
createText("Arial-BoldMT", 12.0, 0,0,0, question, 25, 15);
createText("Arial-BoldMT", 10.0, 0,0,0, choice, 25, 50);
createText("Arial-BoldMT", 8.0, 128,128,128, answer, 25, 140);
//alert(question);
//alert(choice);
//alert("Answer: " + answer);
// function REPLACE NEWLINE (str) :replaces "\n" with "\r"
// ----------------------------------------------------------------
function replaceNewLine(str)
{
return str.replace(/(\n)/gm,"\r"); //replace newline
}
// function READ IT (path, filename) :returns string
// ----------------------------------------------------------------
function readIt(inPath, inFile)
{
var theFile = new File(inPath + "/" + inFile);
//read in file
var words = "";
var textFile = new File(theFile);
textFile.open('r');
while(!textFile.eof)
{
var line = textFile.readln();
if (line != null && line.length >0)
//if (line != null) // reads it as is
{
words += line + "\n";
}
}
textFile.close();
// return string
return words
}
// function CREATE TEXT(typeface, size, R, G, B, text content, text X pos, text Y pos)
// --------------------------------------------------------
function createText(fface, size, colR, colG, colB, content, tX, tY)
{
// Add a new layer in the new document
var artLayerRef = srcDoc.artLayers.add()
// Specify that the layer is a text layer
artLayerRef.kind = LayerKind.TEXT
//This section defines the color of the hello world text
textColor = new SolidColor();
textColor.rgb.red = colR;
textColor.rgb.green = colG;
textColor.rgb.blue = colB;
//Get a reference to the text item so that we can add the text and format it a bit
textItemRef = artLayerRef.textItem
textItemRef.font = fface;
textItemRef.contents = content;
textItemRef.color = textColor;
textItemRef.size = size
textItemRef.position = new Array(tX, tY) //pixels from the left, pixels from the top
}
答案 2 :(得分:0)
我相当肯定我不会尝试使用Photoshop脚本,但会选择安装在大多数Linux发行版上的ImageMagick,可以免费使用Apple OS X和所有优秀的操作系统(和Windows) devtool
假设您在名为card.png
然后您可以在桌面上添加文本,或者如果您的测验在线并且想要动态生成问题卡,则可以作为PHP脚本添加:
convert card.png \
-gravity center \
-fill fuchsia \
-font BradleyHandB \
-pointsize 48 \
-background none \
label:'Q: Is this a question?\nA: If this is an answer.' \
-compose srcover -composite out.jpg
如果您的设计师的卡片是Photoshop PSD文件,您可以在上面的命令中使用card.psd[0]
代替card.png
,因为PSD
文件的图层[0]是整个展平的图像。
我建议您将您的问题从Excel导出到CSV
(逗号分隔值)文件中,然后在一个小循环中阅读问题和答案非常简单卡片。
因此,假设您从Excel导出了一个名为quiz.cv
的文件,如下所示:
Is this a question? If this is an answer.
What was Walt Disney's first name? Walt.
In English, what do the initials of the car manufacturer BMW stand for? Bavarian Motor Works
然后在Linux上,你会做这样的事情
#!/bin/bash
i=0
while IFS=$'\n' read question; do
convert card.png \
-gravity center \
-fill fuchsia \
-font BradleyHandB \
-pointsize 48 \
-background none \
label:'$question' \
-compose srcover -composite card${i}.jpg
((i++))
done < quiz.csv
会为您提供card0.jpg
,card1.jpg
,card2.jpg
等。
当然,其他颜色,字体,布局,大小也是可能的,因为Windows版本的脚本也是如此。这取决于你想要的东西。