最近挺迷茫,总感觉高不成低不就的,看源码或书的时候有些焦躁,好吧,也许又到瓶颈了...
先静一静吧,回想一开始学编程时,出发点之一是:想用脚本玩转PhotoShop,久而久之竟然忘记
现在一些主流语言也都差不多接触了,面向对象的理解也挺深的,看到PS时,在想:换个心情呗!

环境
脚本语言: JavaScript
IDE环境:Idea (随意,记事本也可以)
PS版本:18.0.0
复制代码

一、脚本的使用

1.HelloWolrd 走起
---->[Hello.js]-----------------
Alert("Hello World");
复制代码

2.自定义快捷键

二、从面向对象的角度来看PhotoShop

0.对象:app

将整个app看做一个对象,它拥有着众多的方法和属性,以此可以获取信息和操作图片
先来看一下app对象中的几个对象,找点感觉

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);
复制代码

三、文件操作相关

1.打开图片:"open(File)"
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.压缩并保存图片(web)

直接保存的png 有11.1M, web导出的0.3k,虽然效果上有些失色,还是很有价值的。

//压缩保存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的本身是一个对象app就行了,就像浏览器的window对象
下面进入正题:


开始散扯-----------------------闲人请进--------------------------------

1.代码是什么?

不知道有没有人真正认真考虑过这个问题,还是跟我一样,上来就是用Java跟着敲HelloWorld
然后输出了HelloWorld,老师得意的说:看到没,这就是你们的第一行代码。之后就一路api...

这个问题对于程序员来说就像在问什么是呼吸一样,那呼吸是什么?
|-- 呼吸,是指机体与外界环境之间气体交换的过程代码是什么?
|-- 代码就是程序员用开发工具所支持的语言写出来的源文件,
|-- 是一组由字符、符号或信号码元以离散形式表示信息的明确的规则体系代码是两个字,当然也是翻译出来的(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,敬请期待(或许没了也说不定)...

PS脚本篇--1.代码是什么,写代码干嘛?相关推荐

  1. 一行一个链接代码_小白写代码讨女朋友欢心,包教包会

    爱情这点小事里,不花钱也可以很有情致- 你看鹅厂程序员小彭,在520来临之际,给女朋友写了段代码,不花钱就让女朋友惊喜又感动. https://elvinn-1aa07a-1251269979.tcl ...

  2. 多元线性回归,岭回归,lasso回归(具体代码(包括调用库代码和手写代码实现)+一点点心得)

    最近数据挖掘导论老师布置了一项作业,主要就是线性回归的实现,笔者之前听过吴恩达的线性回归的网课,但一直没有进行代码的实现,这次正好相对系统的整理一下,方便各位同学的学习,也希望能够对其进行优化,优化的 ...

  3. html个人博客完整代码_hexo | 不用写代码,2小时快速搭建个人博客

    很多人都想拥有自己的个人博客,还得看起来漂亮.酷酷的.不装下逼,可能都觉得自己这辈子白活了,这里介绍一个装逼神器.本人前面忙活了几个晚上,终于弄好了,这里简单分享给大家. 大家好,才是真的好! 男生可 ...

  4. idea代码可以编译但是爆红_推荐一款 IDEA 生成代码神器,写代码再也不用加班了...

    作者:HeloWxl 链接:https://www.jianshu.com/p/e4192d7c6844 Easycode是idea的一个插件,可以直接对数据的表生成entity,controller ...

  5. 为了营造一个看代码舒服的氛围,写了获取王者荣耀所有高清皮肤的代码,现在写代码舒心了(中途发现了一个秘密)

    自从发现了该海报,我沦陷了

  6. 对比股票趋势图,留下相似度高的,使用python代码,直接写代码

    好的,首先我们需要获取股票的历史数据,这通常可以通过调用金融数据接口或者爬取网页获取.假设我们已经获取了两只股票的历史数据,并将其存储在两个列表中,分别为 stock_1 和 stock_2. 我们可 ...

  7. Leetcode惊现马化腾每天刷题?为啥大佬都这么努力?代码你打算写到几岁?

    前几天,一张未证真伪的截图流传,图中显示马化腾几乎每天都会在 Leetcode 上提交代码. 截图还贴出一个 Leetcode 账户地址.该地址的头像已从马化腾的照片换成腾讯 logo,昵称也从&qu ...

  8. 读研2年,我选择从中科院退学转行写代码

    文章来源:知乎|已授权转载 作者:一个不愿意透露姓名的知乎用户 感谢原作者愿意授权分享,希望对读者有帮助,尊重每一篇原创. 声明:评论区很多人一直在喊"这很知乎",故事作者不是我本 ...

  9. 从教女友写代码中学到的,教人写代码在一定程度上是硬件问题

    从今年四月一直到七月,我在教我女友写代码.我最大的收获是认识到了教人写代码在一定程度上是个硬件问题.虽然 codecademy.可 汗学 院.Scratch 和其他机构为了教学优化了代码编辑器,但代码 ...

最新文章

  1. ASP.NET Core文件上传IFormFile于Request.Body的羁绊
  2. 阿里拍卖官方客服全面升级 推出一对一教你“一站式服务”
  3. mediawiki初学心得及使用方法
  4. linux系统清理内存,如何清除linux的内存缓存,缓冲和交换空间
  5. 【问题解决】解决 Android SDK下载和更新失败“Connection to https://dl-ssl.google.com refused”的问题
  6. Centos 安装最新版git
  7. 华为网络-ensp实验
  8. DCDC BUCK芯片外围电路器件计算-包括Cin、Cout、L、f、cFF、等输出电容、电感计算、补偿电路计算
  9. 微信小程序云开发 1 - 数据库
  10. 76 爬虫 - Scrapy案例(阳光热线问政平台)
  11. 百度贴吧引流的一些技巧_专注流量研究-万能的小胡
  12. 7 年 Python 的我,总结了这 90 条写 Python 程序的建议
  13. Kubernetes(七)Pod进阶之Downward API和PodPreset
  14. 图片怎样调整分辨率?如何在线修改分辨率?
  15. codeforce 543 B 最短路
  16. 刺激越多效果越好?无创神经调控技术(rTMS)缓解疼痛
  17. UVa 12412 - A Typical Homework (a.k.a Shi Xiong Bang Bang Mang)
  18. 广州市番禺区2021-2022学年九年级第一学期期末考试英语试题
  19. 【camera】6.相机上下游厂商及相机选型
  20. 本地局域网用wordpress搭建个人网站

热门文章

  1. 微软Azure建站系列-免费SSL证书
  2. DNS BIND之dnssec安全介绍
  3. linux下安装rar命令
  4. SU插件情报局 | VBO管道插件
  5. 胸部肌肉训练(附图)
  6. python列出所有方法_如何在python中列出所有Faker方法
  7. safari快捷图标不见了_原神启动器维护之后不见了怎么找 启动器找寻技巧分享[多图]...
  8. badboy 录制脚本并并发脚本
  9. 简单四步开始树莓派上的Docker之旅
  10. 希捷公布部分硬盘存在固件缺陷