vbs调用photoshop批量生成缩略图的代码
来源: 阅读:822 次 日期:2016-06-14 09:57:51
温馨提示: 小编为您整理了“vbs调用photoshop批量生成缩略图的代码”,方便广大网友查阅!

这篇文章主要为大家分享了通过vbs调用photoshop批量生成缩略图,需要的朋友可以参考下

模仿腾讯新闻页,给kingcms添加了新闻页图片点播的代码,代码要求的图片点播格式如下:

0###http://www.website.org/uploadfile/123.jpg@@@/small/123.gif@@@8标题一***http://www.website.org/uploadfile/456.jpg@@@/small/456.gif@@@标题二***http://www.website.org/uploadfile/789.jpg@@@/small/789.gif@@@标题三

格式解释如下:

0代表第0页出现图片点播;

http://www.website.org/uploadfile/123.jpg是第一幅原图地址。/small/123.gif是第一幅缩略图地址,原图和缩略图名字一样,后缀不一样,原图是jpg,缩略图是gif。标题一是第一幅图片的说明文字;

第二幅、第三幅图片格式和第一幅图一样;

###、@@@、***为相应的分隔符。

-------------------------------------------------分割线--------------------------------------------------------

开始我是用手工来写这些图片格式,发现效率很低,一下午只发布了两篇新闻,就编写了相应的vbs脚本。

脚本一:采集新闻图片,并生成相应的图片格式代码

directory = 原始图

directory = createobject(scripting.filesystemobject).getfolder(.).path & \ & directory & \

call deletefiles(directory)

strurl = inputbox(请输入网址:)

if strurl <> then

call getimages(strurl)

end if

function getimages(strurl)

set ie = wscript.createobject(internetexplorer.application)

ie.visible = true

ie.navigate strurl

do

wscript.sleep 500

loop until ie.readystate=4

set objimgs = ie.document.getelementbyid(fontzoom).getelementsbytagname(img)

strtitles = inputbox(请输入图片配字:)

arrtitles = split(strtitles, )

strcode = 0###

for i=0 to objimgs.length - 1

if i>0 then strcode = strcode + ***

smallpic = replace(mid(objimgs(i).src, instrrev(objimgs(i).src, /)+1), jpg, gif)

strcode = strcode + objimgs(i).src + @@@/small/ + smallpic + @@@ + arrtitles(i)

saveremotefile objimgs(i).src

next

ie.quit

inputbox 请复制结果:, , strcode

end function

sub saveremotefile(remotefileurl)

localfile = directory & mid(remotefileurl, instrrev(remotefileurl, /)+1)

set xmlhttp = createobject(microsoft.xmlhttp)

with xmlhttp

.open get, remotefileurl, false, ,

.send

getremotedata = .responsebody

end with

set xmlhttp = nothing

set ads = createobject(adodb.stream)

with ads

.type = 1

.open

.write getremotedata

.savetofile localfile, 2

.cancel()

.close()

end with

set ads=nothing

end sub

function deletefiles(strfolder)

set objfso = createobject(scripting.filesystemobject)

set objfolder = objfso.getfolder(strfolder)

set objfiles = objfolder.files

for each objfile in objfiles

objfile.delete

next

set objfso = nothing

end function

脚本二:调用photoshop批量生成缩略图

directory = 原始图 '原始图像的文件夹

newdirectory = 缩略图 '保存缩小图的文件夹

const psdonotsavechanges = 2

const psextensiontype_pslowercase = 2

const psdisplaynodialogs = 3

const pslocalselective = 7

const psblackwhite = 2

const psnodither = 1

limitheight = 58 '最大高度

imgresolution = 72 '解析度

call deletefiles(newdirectory)

call convert2gif(directory)

function resizeimg(doc)

rsheight = doc.height

scale = 1.0

if rsheight > limitheight then

scale = limitheight / (doc.height + 0.0)

rswidth = doc.width * scale

rsheight = doc.height * scale

end if

doc.resizeimage rswidth, rsheight, imgresolution, 3

end function

function convert2gif(directory)

set app = createobject( photoshop.application )

app.bringtofront()

app.preferences.rulerunits = 1 'pspixels

app.displaydialogs = psdisplaynodialogs

set gifopt = createobject(photoshop.gifsaveoptions)

with gifopt

.palette = pslocalselective

.colors = 256

.forced = psblackwhite

.transparency = false

.dither = psnodither

.interlaced = false

end with

set fso = createobject(scripting.filesystemobject)

if not fso.folderexists(directory) then

msgbox photo directory not exists.

exit function

end if

set objfiles = fso.getfolder(directory).files

newdirectory = fso.getfolder(.).path & \ & newdirectory & \

for each objfile in objfiles

if split(objfile.name, .)(1) <> db then

set doc = app.open(objfile.path)

set app.activedocument = doc

resizeimg(doc)

doc.saveas newdirectory & split(objfile.name, .)(0) & .gif, gifopt, true, psextensiontype_pslowercase

call doc.close(psdonotsavechanges)

set doc = nothing

end if

next

set app = nothing

end function

function deletefiles(strfolder)

set objfso = createobject(scripting.filesystemobject)

set objfolder = objfso.getfolder(strfolder)

set objfiles = objfolder.files

for each objfile in objfiles

objfile.delete

next

set objfso = nothing

end function

比较了一下,gif缩略图体积最小,所以就gif缩略图。关于vbs调用photoshop,在photoshop的c:\program files\adobe\adobe photoshop cs4\scripting\documents目录下是说明文档,c:\program files\adobe\adobe photoshop cs4\scripting\sample scripts目录下是示例代码。如果要生成png缩略图,可以参考文档修改脚本相应的代码即可:

set pngopt = createobject(photoshop.pngsaveoptions)

with pngopt

.interlaced = false

end with

开始打算是调用set jpeg = createobject(persits.jpeg)来生成缩略图,好处是不用加载庞大的photoshop,生成缩略图速度很快,但比起photoshop图片质量差了一些,就放弃了。

本来的打算是不保存原图,直接打开网路图片,然后直接生成缩略图到本地。虽然photoshop可以打开网络图片,但在脚本里调用photoshop打开网络图片就不行,只好先保存网络图片到本地,然后再生成缩略图。

其实photoshop自带了图片批处理功能:

窗口->动作->创建新动作->在ps中打开所有你想做的图片->选择其中一张图片,调整大小,另存为gif格式->关闭你已做好的图片->停止播放/记录。

文件->自动->批处理->“动作”栏中选你刚刚新创建的动作名称->点“源”下面的“选择”选择你想要处理照片的文件夹->“目标”下面“选择”另外一个你想保存缩略图的文件夹->确定。就ok了!

但比起程序来,显然程序要灵活的多,而且很多批处理效果只能靠程序实现,所以没有通过录制动作来生成缩略图。

生成相应的图片格式代码,也可以在地址栏输入以下js代码:

javascript:d=prompt(图片配字,);e=d.split( );a=document.getelementbyid(fontzoom);b=a.getelementsbytagname(img);c=0###;for(i=0;i<b.length;i++){if(i>0) c+=***;c=c+b[i].src+@@@/small/+b[i].src.substring(b[i].src.lastindexof(/)+1).replace(jpg,gif)+@@@+e[i];}window.prompt(复制,c);void(0);

更多信息请查看脚本栏目
下一篇:多层层显示js
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:hfpxwx
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map