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);

(0)

相关推荐

  • .net C#生成缩略图实现思路分解

    复制代码 代码如下: /// 生成缩略图 /// </summary> /// <param name="originalImagePath">源图路径</param> /// <param name="thumbnailPath">缩略图路径</param> /// <param name="width">缩略图宽度</param> /// <param

  • php生成缩略图的类代码

    <?php /** * 功能:生成缩略图 * 作者:phpox * 日期:Thu May 17 09:57:05 CST 2007 */ class CreatMiniature { //公共变量 var $srcFile=""; //原图 var $echoType; //输出图片类型,link--不保存为文件:file--保存为文件 var $im=""; //临时变量 var $srcW=""; //原图宽 var $srcH=&qu

  • asp.net中生成缩略图并添加版权实例代码

    复制代码 代码如下: //定义image类的对象Drawing.Image image,newimage;//图片路径protected string imagePath;//图片类型protected string imageType;//图片名称protected string imageName;//提供一个回调方法,用于确定Image对象在执行生成缩略图操作时何时提前取消执行//如果此方法确定 GetThumbnailImage 方法应提前停止执行,则返回 true:否则返回 false

  • c#生成缩略图不失真的方法实例分享

    复制代码 代码如下: /// <summary>/// 获得缩微图/// </summary>/// <returns></returns>  public bool GetThumbImg(){try{string imgpath; //原始路径     if(imgsourceurl.IndexOf("\",0)<0) //使用的是相对路径     {imgpath = HttpContext.Current.Server.Ma

  • 基于PHP服务端图片生成缩略图的方法详解

    复制代码 代码如下: <?php//定义缩略图片尺寸$picSize = array(              '100_100'=> 1,              '200_100'=> 1           );$imagePath = "../image/";function parseUrl($url){   preg_match("/(?P<name>[\w\d]+)_w(?P<width>\d+)_h(?P<h

  • c#生成缩略图的实现方法

    复制代码 代码如下: private void SaveThumbnail(Bitmap originBitmap, int width, int height, string directory, string filename, string extension){    var physicalPath = directory + filename + extension; using (var newImage = new Bitmap(width, height))    {     

  • c#多图片上传并生成缩略图的实例代码

    前台代码: 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="upload.aspx.cs" Inherits="upload" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat=&q

  • php生成缩略图填充白边(等比缩略图方案)

    网站上传图片后生成缩略图应该是非常常用的功能了,通常来讲为了网站显示美观,缩略图会是同样尺寸,比如最近笔者做的一个站点,缩略图规格要求都是160×120.但是如果上传的图片比例和缩略图不一致,直接缩放的话就会导致图片变形,这样体验肯定就不好了.于是笔者想了一个折中的办法,就是缩小后添加白边的方法. 源图,尺寸是600×366: 最终生成的效果图: 代码相对比较长些,下面简单说下思路: 先将源图按比例生成缩略图,并且宽不大于160.高不大于120.例如上图会先生成160×98的缩略图.新建一个16

  • 使用gd库实现php服务端图片裁剪和生成缩略图功能分享

    裁剪示例: 最终裁剪成的图片: 其中虚线框内就是要裁剪出来的图片,最终保存成100宽的图片.代码如下: 复制代码 代码如下: $src_path = '1.jpg';//创建源图的实例$src = imagecreatefromstring(file_get_contents($src_path)); //裁剪开区域左上角的点的坐标$x = 100;$y = 12;//裁剪区域的宽和高$width = 200;$height = 200;//最终保存成图片的宽和高,和源要等比例,否则会变形$fi

  • PHP批量生成缩略图的代码

    缺点:长宽不一的图片会被拉伸变形,不能智能裁切,需要智能裁切的,请自行研究.<?php  $config = array();  $config['path'] = "./";  $config['t_width'] = 120;  $config['t_height'] = 98;  $config['ignore'] = array("",".","..");  $config['prefix'] = "t

随机推荐