这篇文章主要为大家分享了通过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);