武汉大学珞珈山水BBS论坛

武汉大学bbs,武汉大学论坛,武汉大学网站,武汉大学bbs论坛,武大bbs,珞珈山水,珞珈山水bbs,武大论坛,洛加山水,加洛山水

[回到开始] [上一篇][下一篇]


发信人: ojh (不想骗人的骗子), 信区: Photography
标  题: photoshop script加EIXF信息程序的优化
发信站: BBS 珞珈山水站 (Mon Jun 23 13:58:13 2008)

昨天晚上在看照片,突然觉着以前编写的那个在PHOTOSHOP中利用SCRIPT给照片加LOGO的程
序编的不是很完善,想改过来。因为以前在使用SCRIPT时,为了统一较长的边是800,或者
600,不得不手动分筛横幅照片和竖幅照片,分别用不同的ACTION来改变图片的大小。这样
很不方便。想想看,如果有上百张照片要手动分开,还是有点累。
以前之所以没有直接写好,是有个难题,图像要进行两次输出,因为我要两次改变图像大
小,以适应不同贴图的需要,一个是边长为600px的,用来贴在MSN上,一个是长800px的,
用来贴在论坛里。第二次输出就需要在第一次输出以后回复到原始状态,重新改变图像大
小,然后重新绘上文字层,这样可以保证文字大小合适并且清晰。但是这样的话,就需要
保存原来的状态,这一点有难度。
想着,应该用SCRIPT实现生成快照的功能,这样就可以解决一定的劳动量了。上网查了查
,果然,还是可以实现的。下现是代码:

//建立快照
function takeSnapshot () {
    var id686 = charIDToTypeID( "Mk  " );
    var desc153 = new ActionDescriptor();
    var id687 = charIDToTypeID( "null" );
    var ref119 = new ActionReference();
    var id688 = charIDToTypeID( "SnpS" );
    ref119.putClass( id688 );
    desc153.putReference( id687, ref119 );
    var id689 = charIDToTypeID( "From" );
    var ref120 = new ActionReference();
    var id690 = charIDToTypeID( "HstS" );
    var id691 = charIDToTypeID( "CrnH" );
    ref120.putProperty( id690, id691 );
    desc153.putReference( id689, ref120 );
    executeAction( id686, desc153, DialogModes.NO );
}
//提取最后一次生成的快照
function revertToLastSnapshot() {
    var docRef = app.activeDocument;
    var hsObj = docRef.historyStates;
    var hsLength = hsObj.length;
    for (var i = hsLength-1; i > -1; i--) {
        if(hsObj[i].snapshot) {
            docRef.activeHistoryState = hsObj.getByName('Snapshot ' + i);
            break;
        }
    }
}

为了输出的方便,得获取文件名:
//获取目录名+文件名
var Path = AD.path.toString();
var SlashPos = Path.lastIndexOf('/');
if(SlashPos!=-1){ Path = Path.substring(SlashPos+1, Path.length)+" ";}
while(Path.indexOf('%20')!=-1){Path=Path.replace("%20"," ");}
var FileName = AD.name;
var DotPos = FileName.lastIndexOf('.');
if(DotPos != -1) { FileName = FileName.substring(0, DotPos); };

输出为网页优化的JPEG格式:
//保存文件
if(photoWidth>=700)
{
    saveFile = new File("C:\Documents and Settings\gaziou\My Documents\My Pict
ures\xteck\"+FileName+".jpg");
}
else
{
    saveFile = new File("C:\Documents and Settings\gaziou\My Documents\My Pict
ures\msnblog\"+FileName+".jpg");
}
    saveOptions = new ExportOptionsSaveForWeb();
      saveOptions.includeProfile = false;
      saveOptions.format = SaveDocumentType.JPEG;
      saveOptions.interlaced = 0;
      saveOptions.optimized = true;
      saveOptions.quality = 60;
      AD.exportDocument(saveFile,ExportType.SAVEFORWEB, saveOptions);

判断照片的横竖幅,如果是竖幅,先转一下当横幅处理,处理完以后再转回去。
//获得文件的长与宽
var photoWidth = AD.width.value;
var photoHeight = AD.height.value;

//如果图片是竖版的先横置,并以swapTemp为标记如果swapTemp不为零最后再把它转回来

var swapTemp = 0;
if (photoWidth < photoHeight)
    {app.activeDocument.rotateCanvas(90.0);
    swapTemp = photoWidth;
    photoWidth = photoHeight;
    photoHeight = swapTemp;
    }
……
……
//原来竖版的图片还原竖版状态
if (swapTemp!=0)
{
    app.activeDocument.rotateCanvas(-90.0);
}

镜头的侦别,我是依据EXIF中的焦距长度来判断的。但其实这样依据不足。如果有焦距重
复的话会错判,现在我也没有办法。
   if(stringTemp.indexOf("Focal Length")!=-1){
       var focalLength =tempArray[n+1];

    var focusIndex=focalLength.indexOf(" mm");
    focusIndex-=2;
    focalLength=focalLength.substring(0,focusIndex);
    var r=parseInt(focalLength);
    switch(r)
    {
        case 100:
            {focalLength = '100mm F2.8 Macro USM, ';break;}
        case 85:
            {focalLength = '85mm F1.2L USM, ';break;}
        case 14:
            {focalLength="use 14mm F2.8 HSM.";break;}
        case 0:
            {focalLength="ManuFocus Lense";break;}
        default:
            {
                if(r>=24&&r<=70)
                {focalLength = '24-70mm F2.8L USM @'+focalLength+', ';break;}

                else {
                if(r>70&&r<=200)
                {focalLength = '70-200mm F4L IS USM @'+focalLength+', ';break;
}
                else
                {focalLength="Unknown Lense@";break;}
                }
            }
    }
   }

大致就是这个样子了。改完都一点多了。看来一玩编程真容易搞到很晚。
下面是录相资料,大约看一下吧。

http://www.youtube.com/watch?v=iUKc8qmm92I
--
欢迎来http://qiuworld.com玩。

※ 来源:·珞珈山水BBS站 http://bbs.whu.edu.cn·[FROM: 133.1.131.*]


[回到开始] [上一篇][下一篇]

本站是基于热心建立,如有侵权敬请致信告知

粤ICP备17011212号 szuonline.cn @8.7
深大在线 荔园在线 荔园晨风 荔园晨风BBS 荔园晨风bbs站 深大bbs 深圳大学bbs 深圳大学论坛 深圳大学内部网 szu bbs 荔园晨风地址 荔园晨风校外地址 荔园晨风登陆地址 荔园晨风登录地址 荔园晨风怎么登录 荔园晨风怎么登陆 深圳大学荔园晨风 荔园晨风登录不了吗 深大荔园晨风关了吗 荔园晨风官网 荔园晨风无法校外登陆 荔园晨风bbs登录不了 梨园晨风
我从来不回头看,因为那样会让我对现在分心。