PS скрипт статей -- 1. Что такое код, зачем вы пишете код?

JavaScript Photoshop
PS скрипт статей -- 1. Что такое код, зачем вы пишете код?

Я был очень смущен в последнее время, я всегда чувствую高不成低不就Да, при просмотре исходного кода или книг有些焦躁а может опять пробка...
Сначала тихо, подумайте о начальном программировании, одна из отправных точек:想用脚本玩转PhotoShop, со временем даже忘记охватывать
некоторые сейчас主流语言почти вышел на связь,面向对象Понимание тоже довольно глубокое, я вижу PS, думаю: меняй свое настроение напев!

окружающая обстановка
脚本语言: JavaScript
IDE环境:Idea (随意,记事本也可以)
PS版本:18.0.0

Использование скриптов

1. Привет, Мир, поднимись
---->[Hello.js]-----------------
Alert("Hello World");


2. Настройте сочетания клавиш


2. Взгляд на PhotoShop с объектно-ориентированной точки зрения

0. Объект: приложение

Думайте обо всем приложении как об объекте, который имеет множество методов и свойств, чтобы вы могли получать информацию и манипулировать изображениями.
Давайте сначала посмотрим на несколько объектов в объекте приложения, чтобы найти некоторые чувства

app {//整个PS软件对象
    name,//软件名称
    version,//软件版本
    documents:{},//打开的文件的信息
    fonts:{}//系统字体
    recentFiles:{},//所有的打开文档对象(数组)
    activeDocument:{}//当前激活的文档对象
}

1. Получите имя и номер версии + тональный тон:app.beep()
---->[info.js]-----------------
var msg = app.name + "\r\n 版本:" + app.version;
alert(msg);
app.beep() //执行播放提示音效果:叮咚


2. Информация об открытом файле:app.documents

var docs = app.documents;
var msg = "";

for (var i = 0; i < docs.length; i++) {
    msg +=
        "名称:" + docs[i].name + "\r\n" +
        "宽/像素:" + docs[i].width + "\r\n" +
        "高/像素:" + docs[i].height + "\r\n";
}
alert(msg);

3. Список шрифтов:app.fonts

var fonts = app.fonts;
var msg = "";

for (var i = 0; i < fonts.length; i++) {
    msg += "序号:" + (i + 1) + "  字体:" + fonts[i].name + "\r\n";
}
alert(msg);

4. Недавно открытые файлы:app.recentFiles

var cFiles = app.recentFiles;
var msg = "";
for (var i = 0; i < cFiles.length; i++) {
    msg += (i + 1) + ":" + cFiles[i].name + "\r\n";
}
alert(msg);


5. Текущий активный объект документа:app.activeDocument

var doc = app.activeDocument;
msg = "名称:" + doc.name + "\r\n" +
    "宽/像素:" + doc.width + "\r\n" +
    "高/像素:" + doc.height + "\r\n";
alert(msg);

3. Работа с файлами

1. Откройте картинку: "открыть(Файл)"
var img = File("J:\\Java\\Android\\TolyGithub\\TolyTest\\toly_test\\src\\main\\res\\mipmap-xxhdpi\\bg_10.jpg");
var ok = confirm("打开图片?");
if (ok) {
    open(img)
}


2. Откройте все картинки в папке
var imgFolder = File("J:\\Java\\Android\\TolyGithub\\TolyTest\\toly_test\\src\\main\\res\\mipmap-xxhdpi");
var files = imgFolder.getFiles();
for (var i = 0; i <files.length; i++) {
    var file = files[i];
    if (file instanceof File) {
        open(file);
    }
}


3. Скопируйте текущий документ и откройте его.
var doc = app.activeDocument;//当前文件对象
doc.duplicate(app.activeDocument.name + "-copy", 1);//拷贝当前文档并打开


4. Сохраните файл как:app.activeDocument.saveAs
var doc = app.activeDocument;//当前文件对象
var outPath = new File("G:\\Photo\\龙少.png");
var options = PNGSaveOptions;//保存png模式
var asCopy = true;//副本方式保存
var extensionType = Extension.LOWERCASE;//拓展名小写
doc.saveAs(outPath, options, asCopy, extensionType);
alert("保存完成")


5. Сжать и сохранить изображение (веб)

Непосредственно сохраненный png имеет размер 11,1 МБ, а веб-экспорт 0,3 КБ, хотя эффект немного затмевается, он все же очень ценен.

//压缩保存gif
var doc = app.activeDocument;//当前文件对象
var path = new File("G:\\Photo\\龙少.gif");
var eop = new ExportOptionsSaveForWeb();//web图片导出配置
eop.transparecy = false;//是否正常透明度
eop.includeProfile = true;//是否包含内置颜色配置文件
eop.lossy = 0;//有损压缩程度
eop.colors = 256;//色彩量
eop.colorReduction = ColorReductionType.SELECTIVE;////减低颜色深度算法:可选择
eop.formate = SaveDocumentType.COMPUSERVEGIF;//导出格式FIF
eop.ditherAmount = 0;//像素抖动值
eop.dither = Dither.NOISE;//杂色
eop.palette = Palette.LOCALADAPTIVE;//局部(随样性)
doc.exportDocument(path, ExportType.SAVEFORWEB, eop);
alert("保存完成:" + path);

//压缩保存jpeg
var doc = app.activeDocument;//当前文件对象
var filePath = new File("G:\\Photo\\龙少.jpeg");
var eop = new ExportOptionsSaveForWeb();//web图片导出配置
eop.quality = 60;//图片质量
doc.exportDocument(filePath, ExportType.SAVEFORWEB, eop);
alert("保存完成:" + filePath);

//压缩保存png
var doc = app.activeDocument;//当前文件对象
var filePath = new File("G:\\Photo\\龙少-compressed.png");
var eop = new ExportOptionsSaveForWeb();//web图片导出配置
eop.PNG8 = true;//png 8彩
doc.exportDocument(filePath, ExportType.SAVEFORWEB, eop);
alert("保存完成:" + filePath);


В-четвертых, несколько простых операций

1. Создайте новый файл
//创建新文件
var width = 1080;//宽
var height = 1920;//高
var resolution=72;//分辨率
var fileName="phone";//名称
var mode = NewDocumentMode.RGB;//色彩模式
var fillColor = DocumentFill.TRANSPARENT;//背景填充颜色
var pixelAspectRatio=1;//像素比率
app.documents.add(width, height, resolution, fileName, mode, fillColor, pixelAspectRatio);


2. Добавьте текстовый слой
//创建文字图层
var doc = app.documents.add(500, 200);
var artLayer = doc.artLayers.add();
artLayer.kind = LayerKind.TEXT;

var textItem = artLayer.textItem;//文字条目
textItem.contents = "张风捷特烈";//文字内容
textItem.size = 40;
artLayer.translate(0, 100);


3. Получить все слои текущего файла
//获取图层对象
var layers = app.activeDocument.artLayers;
var msg = "";
for (var i = 0; i < layers.length; i++) {
    var layer = layers[i];
    msg += i + "--图层名称:" + layer.name + "\r\n";
}
alert(msg);


4. Получите размер слоя
var layer = app.activeDocument.activeLayer;//活动图层
alert(layer.bounds);


5. Текущий активный слой: Цветовой баланс
var layer = app.activeDocument.activeLayer;//活动图层
layer.adjustColorBalance([-39,-81,0], [-44,50,-52], [0,0,0], true);//阴影、中间调、高光


6. Изменение цветов переднего плана и фона
var ok = confirm("是否随机设置前景色和背景色?");
if (ok) {
    //前景色
    app.foregroundColor.rgb.red = Math.random() * 255;
    app.foregroundColor.rgb.green = Math.random() * 255;
    app.foregroundColor.rgb.blue = Math.random() * 255;
    //背景色
    app.backgroundColor.rgb.red = Math.random() * 255;
    app.backgroundColor.rgb.green = Math.random() * 255;
    app.backgroundColor.rgb.blue = Math.random() * 255;
}

Введение здесь, в этой статье нужно только понять, что PS сама по себе является объектным приложением, точно так же, как объект окна браузера.
Перейдем к делу:


Начните общаться -------------------------- Номеры, пожалуйста, приходите ------------------------ --------------

1. Что такое код?

Я не знаю, действительно ли кто-то серьезно рассматривал эту проблему, или это то же самое, что и я, просто следуйте за HelloWorld с помощью Java.
затем выводHelloWorld, учитель гордо сказал: смотри, это твоя первая строчка кода. После этого весь путь до апи...

这个问题对于程序员来说就像在问什么是呼吸一样,那呼吸是什么?
|-- 呼吸,是指机体与外界环境之间气体交换的过程

代码是什么?
|-- 代码就是程序员用开发工具所支持的语言写出来的源文件,
|-- 是一组由字符、符号或信号码元以离散形式表示信息的明确的规则体系

代码是两个字,当然也是翻译出来的(code),我觉得这翻译的恰到好处
代: 替代物,也就是说此物并非真身
码:这个字在中国是一个计量的工具,是一个代表数目的符号

整个过程就像一个中国人在德国餐厅,说一句中文:"请给我一杯水",
然后经过空气粒子翻译后,改变空气分子震动方式,传到德国人的耳中:"Geben Sie mir ein Glas Wasser."
然后德国人给你一杯水喝一样。中国人并不需要会德文,他也能发出指令让对方执行。

代码就是:"请给我一杯水",代替的是:"Geben Sie mir ein Glas Wasser."
"空气翻译粒子"就是生产代码所在的语言环境,我们俗称:"IDE"

[1].代码不是给计算机看的,代码是给人看的
[2].计算机/虚拟机可以识别并运行代码编译后的二进制文件
[3].程序的执行功能需要正确的编译

2. Зачем писать код?
这个问题对于程序员来说就像在问人为什么要呼吸一样,毫无意义?那人为什么要呼吸呢?
|-- A : 不呼吸就憋死了呗
|-- B : 呼吸作用可以使内糖类、脂类和蛋白质等有机物的氧化分解,产生ATP,提供生命活动需要的能量
|-- C : 呼吸作用:
        第一阶段 C6H12O6(葡萄糖)=4[[H]{(还原氢)+2C3H403(丙酮酸)+2ATP
        第二阶段 2C3H4O3(丙酮酸)+6H2O(水)===20[H](还原氢)+6CO2(二氧化碳)+2ATP
        第三阶段 24[H](还原氢)+6O2(氧气)=12H2O(水)+大量能量34ATP
        总反应式 C6H12O6+6H2O+6O2 --酶-→ 6CO2+12H2O+大量能量(38ATP)

代码是什么?
|-- A : 不写代码就饿死了
|-- B : 写代码可以使脑中的想法、架构、功能等思维现实化成产品,产生金钱,提供生命活动需要的物质
|-- C : 写代码:
        第一阶段:衣带渐宽终不悔,为伊消得人憔悴 = 千百虐 + 如初恋
        第二阶段:独上高楼,望断天涯路
        第二阶段:蓦然回首,那人却在灯火阑珊处 ---> 登顶封神
        
代码是一种手段,能让计算机执行人的意志。
其实不写代码也可以,有能力你可以直接敲0101,就像那个中国人直接说:"Geben Sie mir ein Glas Wasser."  

为了更好的让计算机执行人的意志,我们从问题的解决方案由:
一条条的指令的执行来完成任务(面向过程)
到将问题抽象成类,让对象之间相互作用来完成任务(面向对象)

这就相当于出现了板砖,然后就能搭架构,建房子,房子又有各自的风格
还要内部的运行机制合理,然后大型的程序不但可以平稳的运行,还能拓展新功能  

像PhotoShop这样的大型软件,提供了一个GUI的操作界面,也就是 代码---> 无码  
设计师不需要会敲代码,也可以使用,而且他们的美学和设计专业的知识更与PhotoShop相配:

代码 --> 编译器 --> 二进制文件   -->计算机    依靠编译器产生二进制文件,计算机可执行它本不认识的代码 
代码 --> 计算机 --> 图形界面     --> 设计师   依靠计算机产生图形界面,设计师可执行它本不认识的代码
代码 --> 计算机 --> PhotoShop对象--> 脚本     依靠计算机产生PhotoShop对象,脚本可执行它本不认识的代码

PS 拥有很完善的GUI界面,我并不认为在设计方面脚本能比设计师厉害
脚本暂时感觉还挺鸡肋,能用界面解决的为什么非要写代码?
代码的优势在于高效,不怕累,精确,缜密,低费,抓住这几点,脚本应该还是有用武之地的

В общем, у нас есть нерешенные вопросы, называемыеIN数据, результат после обработки называетсяOUT数据
Конечной целью кода является решение проблемы (преобразование данных), и, наконец, подавляющее большинство из них реализовано в человеческих чувствах, а именноOUT数据потребляться для создания стоимости

В древности художники丑女(IN数据)окрашенный美女(OUT数据), заказчик очень доволен, работа выполнена
Теперь PS будет丑女(IN数据)стали美女(OUT数据), заказчик выглядел очень довольным и выполнил работу.
Существенная разница между ними заключается в том, что способ решения проблемы заключается в обработке данных.Handleесть разница.
Код эффективен, практичен, прост в использовании, точен, дотошен, а низкая стоимость определяет его непревзойденную конкурентоспособность. Но в то же время его неясность заставляет массы望尘莫及

Зачем писать код?
--- 不写代码你想干哈? 想飞上天啊? 想和太阳肩并肩啊?能得了你还....
Куча чуши, надо видеть и видеть, в следующей статье будет официально подробно представлен соответствующий API, так что следите за обновлениями (может быть, даже если его уже нет)...