::welovefoto:: ชมรมถ่ายภาพพิษณุโลก ::welovefoto:: ชมรมถ่ายภาพพิษณุโลก
09 กันยายน 2010, 12:19:29 *
ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน
ส่งอีเมล์ยืนยันการใช้งาน?

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น
Advanced Search  

0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
หน้า: [1] พิมพ์
ผู้เขียน หัวข้อ: Photoshop Script : Extract Exif to Text Layer  (อ่าน 3884 ครั้ง)
Chi-O
http://pavitchat.multiply.com
ศิษย์พี่
ต้นกล้า
***
ออฟไลน์ ออฟไลน์

เพศ: ชาย
กระทู้: 356


เพลงหอกข้างแคร่


เว็บไซต์
« เมื่อ: 24 พฤษภาคม 2007, 02:51:36 »

 เอาPhotoshop Script มาแจก
หลังจากที่ผลัดวันประกันพรุ่งอยู่นานมาก จนมาวันนี้ก็ได้ฤกษ์เขียน Photoshop Script ที่ค้างอยู่ให้เสร็จซักที
Script ตัวนี้ไม่มีอะไรมาก ก็แค่ดึงเอา EXIF ออกมาสร้างเป็น Text สำหรับเอาไว้ทำ Signature ที่ดูดีมากกว่ามีแค่ชื่อคนถ่าย
ซึ่ง Script ก็ปรับแต่งได้ตามใจต้องการ เหมาะสำหรับคนขี้เกียจพิมพ์อะไรซ้ำ ๆ กันหลายรอบ
มาดูหน้าตา Script เลยดีกว่า

อ้างถึง
var AD = activeDocument;
var TextLayer = AD.artLayers.add();
TextLayer.kind = LayerKind.TEXT;
var txtRef = TextLayer.textItem;

//get exif Data
var exifData = AD.info.exif.toString();
var array = exifData.split(",");

//get lens name
var lens;
if(array[29]=="f/3.5")
lens=" + Canon EF-S10-22mm";
else if(array[15]=="f/2.8")
lens=" + Tamron 28-75mm";
else lens=" + Sigma 70-300mm";

//Create text
var textStr = "Copyright© by Chi-O\u000Dhttp://pavitchat.multiply.com\u000D";;
textStr += array[3]+lens;
textStr += "\u000DISO:"+array[15]+" Exposure:"+array[9];
textStr += "\u000DAperture:"+array[11]+" Focal Length:"+array[35];
txtRef.contents = textStr;
แจ้งลบกระทู้นี้หรือติดต่อผู้ดูแล   บันทึกการเข้า

Chi-O
http://pavitchat.multiply.com
ศิษย์พี่
ต้นกล้า
***
ออฟไลน์ ออฟไลน์

เพศ: ชาย
กระทู้: 356


เพลงหอกข้างแคร่


เว็บไซต์
« ตอบ #1 เมื่อ: 24 พฤษภาคม 2007, 02:52:46 »

 ดูแล้วงง ๆ อะไรก็ไม่รู้ ไม่เป็นไร
เดี๋ยวไปทีละส่วน

ช่วงแรกเป็นการสร้าง object ที่ชื่อ AD เพื่อบอกให้ photoshop มันจัดการกับไฟล์ที่เปิดอยู่
อ้างถึง
var AD = activeDocument
แล้วผมก็สร้าง text layer ขึ้นมา 1 อัน
อ้างถึง
var TextLayer = AD.artLayers.add();
TextLayer.kind = LayerKind.TEXT;
var txtRef = TextLayer.textItem;
เสร็จแล้วก็ไปเอา exif ออกมา extract
อ้างถึง
var exifData = AD.info.exif.toString();
var array = exifData.split(",");
จากตรงนี้ผมจะได้ตัวแปรชื่อ array เป็น string ยาว ๆ คั่นแต่ละฟิลด์ด้วย comma (,)
แล้วผมก็ตัดมันซะ ด้วยฟังก์ชั่น split จะได้มาเป็น array จริง ๆ
ข้อมูลก็ประมาณนี้

แจ้งลบกระทู้นี้หรือติดต่อผู้ดูแล   บันทึกการเข้า

Chi-O
http://pavitchat.multiply.com
ศิษย์พี่
ต้นกล้า
***
ออฟไลน์ ออฟไลน์

เพศ: ชาย
กระทู้: 356


เพลงหอกข้างแคร่


เว็บไซต์
« ตอบ #2 เมื่อ: 24 พฤษภาคม 2007, 02:54:12 »

 แล้วข้อมูลเหล่านี้ล่ะครับ ที่จะหยิบเอามาใส่ text layer ที่สร้างไว้
สำหรับเรื่องเลนส์ อันนี้คงต้องเอาไปแก้ไขกันเอง
ผมทำยังไงก็ดึงข้อมูล exif ที่บอกชนิดเลนส์ที่ใช้ไม่ได้
ก็เลยโกง ๆ เอาโดยวิธีดู Max Aperture เอา (เหมาะกับคนที่มีเลนส์ที่รูรับแสงกว้างสุดแตกต่างกันนะ)
อย่างของผมมี 3 ตัว แต่ละตัว f กว้างสุดไม่เท่ากัน
ตัวแรก 10-22 มันกว้าง 3.5
ตัวที่สอง 28-75 มันกว้าง 2.8
และตัวสุดท้าย 70-300 มันกว้าง 4
ก็เลยเอาตรงนี้แหละ มาแบ่งชนิดเลนส์
อ้างถึง
var lens;
if(array[29]=="f/3.5")
lens=" + Canon EF-S10-22mm";
else if(array[15]=="f/2.8")
lens=" + Tamron 28-75mm";
else lens=" + Sigma 70-300mm";

ดึงเอาข้อมูลจากฟิลด์ที่ 29 (ดู ช่อง Index) มาทำการเปรียบเทียบ
แล้วก็สร้าง text สำหรับชื่อเลนส์ไว้

และแล้วก็ถึงช่วงสุดท้าย
เอาข้อมูลจากแต่ละฟิลด์มาสร้าง text เพื่อเอาไปแปะบนรูป
ก็ดึงข้อมูลที่ต้องการมา โดยอ้างถึงตัวแปรแบบนี้ array[ลำดับ index]

ชื่อ ข้อความในส่วนนี้ปรับเปลี่ยนได้ตามใจชอบนะครับ
อ้างถึง
var textStr = "Copyright by Chi-O\u000Dhttp://pavitchat.multiply.com\u000D";;
textStr += array[3]+lens;
textStr += "\u000DISO:"+array[15]+" Exposure:"+array[9];
textStr += "\u000DAperture:"+array[11]+" Focal Length:"+array[35];
txtRef.contents = textStr;

บรรทัดสุดท้ายคือการเอา text ที่ว่าไปสร้างเป็น text layer ในขั้นต้น
เสร็จแล้ว ไม่ยากใช่ไหมคับ

แล้วจะเอาไปใช้กับ photoshop ได้ยังไง ก็ไม่ยากเช่นกัน
copy code ที่อยู่ใน box ด้านบนแล้วก็เปิด notepad ขึ้นมา
paste แล้ว save นามสกุลชื่อ .jsx อย่าลืมว่าเลือก file type ให้เป็น all files ก่อนนะครับ
ไม่งั้นเดี๋ยว notepad จะเติม .txt ให้อีกรอบ
แจ้งลบกระทู้นี้หรือติดต่อผู้ดูแล   บันทึกการเข้า

Chi-O
http://pavitchat.multiply.com
ศิษย์พี่
ต้นกล้า
***
ออฟไลน์ ออฟไลน์

เพศ: ชาย
กระทู้: 356


เพลงหอกข้างแคร่


เว็บไซต์
« ตอบ #3 เมื่อ: 24 พฤษภาคม 2007, 02:55:31 »

 เอาไฟล์นี้ไปเก็บไว้ซักที่นึง ตามแต่ใจปรารถนาเลยครับ
แล้วก็เปิด Photoshop มา

ไปที่ File > Scripts > Script Events Manager
แจ้งลบกระทู้นี้หรือติดต่อผู้ดูแล   บันทึกการเข้า

Chi-O
http://pavitchat.multiply.com
ศิษย์พี่
ต้นกล้า
***
ออฟไลน์ ออฟไลน์

เพศ: ชาย
กระทู้: 356


เพลงหอกข้างแคร่


เว็บไซต์
« ตอบ #4 เมื่อ: 24 พฤษภาคม 2007, 02:55:59 »

 แล้วก็ browse หาไฟล์ที่ save ไว้
ทีนี้ ตรงช่อง Photoshop Event ผมจะเลือกให้เป็น Open Document
เพื่อให้ทุกครั้งที่เปิดไฟล์มันจะได้สร้าง Text layer ไว้รอเลย
จากนั้นจะไปทำอะไรกับมันก็สบาย ๆ แล้วครับ

แจ้งลบกระทู้นี้หรือติดต่อผู้ดูแล   บันทึกการเข้า

Get Idea
ศิษย์พี่
ร่มโพธ์ร่มไทร
***
ออฟไลน์ ออฟไลน์

เพศ: ชาย
กระทู้: 1,524


BBL


« ตอบ #5 เมื่อ: 24 พฤษภาคม 2007, 10:47:47 »

ขอบคุณครับ

ไปลองก่อนล่ะ

ฟิ้วววว   ว   ว

 Cool
แจ้งลบกระทู้นี้หรือติดต่อผู้ดูแล   บันทึกการเข้า

BekeryBear
ร่มโพธ์ร่มไทร
******
ออฟไลน์ ออฟไลน์

เพศ: ชาย
กระทู้: 1,823


" เพลงทุกเพลงเป็นของโลกใบนี้ "


เว็บไซต์
« ตอบ #6 เมื่อ: 24 พฤษภาคม 2007, 15:32:19 »

โอ้ว ลองมาแล้ว เจ๋งจิงๆๆเลยเกลือ ชอบๆๆ  Cheesy Cheesy
แจ้งลบกระทู้นี้หรือติดต่อผู้ดูแล   บันทึกการเข้า

อย่า"ดูถูก"ภาพคนอื่นด้วยการแกล้งชม

http://bekerybear.multiply.com

สิ่งที่เราชอบ....จะติดตัวเราไปตลอดชีวิต
Chi-O
http://pavitchat.multiply.com
ศิษย์พี่
ต้นกล้า
***
ออฟไลน์ ออฟไลน์

เพศ: ชาย
กระทู้: 356


เพลงหอกข้างแคร่


เว็บไซต์
« ตอบ #7 เมื่อ: 24 พฤษภาคม 2007, 15:54:20 »

 Wink เพิ่มเติมครับ
สำหรับชาวนิกรกรุณาใช้ตาราง index ตัวนี้ครับ



สองค่ายนี้ดันมี exif ไม่เหมือนกัน  Grin
แจ้งลบกระทู้นี้หรือติดต่อผู้ดูแล   บันทึกการเข้า

Chi-O
http://pavitchat.multiply.com
ศิษย์พี่
ต้นกล้า
***
ออฟไลน์ ออฟไลน์

เพศ: ชาย
กระทู้: 356


เพลงหอกข้างแคร่


เว็บไซต์
« ตอบ #8 เมื่อ: 15 มิถุนายน 2007, 15:56:42 »

ทำไปทำมา index มันไม่ work ซะแล้วครับ  :'(
กล้องแต่ละตัว ลำดับก็ไม่เหมือนกัน แถมเลนส์แต่ละตัวก็มีปัญหาด้วย
เลยต้องมีเวอร์ชั่นใหม่ขึ้นมา

อ้างถึง
var AD = activeDocument;
var TextLayer = AD.artLayers.add();
    TextLayer.kind = LayerKind.TEXT;
var txtRef = TextLayer.textItem;
var exifData = AD.info.exif.toString();
var array = exifData.split(",");
//กำหนด font และขนาดของ font
txtRef.font = "Impact";
txtRef.size = 11;

//ประกาศตัวแปรเพื่อเอามาเก็บข้อมูล exif
var lens,model,fstop,speed,iso,length;
var i=0;
while(array){
   //ชื่อรุ่นของกล้อง จะนิยามด้วยคำว่า model
   if(array == "Model")
      model = array[i+1];   
   //F-Stop ก็จะนิยามด้วยคำว่า F-Stop กับ Aperture Value   
   if(array=="F-Stop")
      fstop = array[i+1];
   //ตรงนี้ผมเอามาใช้หาว่าเป็นเลนส์ตัวไหน
   //exif จริง ๆ มันบอกได้ แต่ต้อง export ค่าทั้งหมดออกมาเป็น xml แล้วก็ไปไล่หาเอา ยุ่งยากมากมาย
   //ก็เลยโกง ๆ เอาเพราะรู้อยู่แล้วว่าเลนส์แต่ละตัวที่มี f กว้างสุดไม่เท่ากัน
   //สำหรับคนที่ถือ 2.8 หมดทุกตัวก็เอา Focal Length มาใช้แทนได้นะครับ   
   if(array=="Max Aperture Value")
   {
      if(array[i+1]=="f/3.5")
         lens=" + Canon EF-S10-22mm";
      else if(array[i+1]=="f/2.8")
         lens=" + Tamron 28-75mm";
      else if(array[i+1]=="f/1.8")
         lens=" + EF 85mm";
      else
         lens=" + Sigma 70-300mm";
   }
   //หา Speed Shutter
   if(array=="Shutter Speed")
      speed = array[i+1];
   //หา ISO
   if(array=="ISO Speed Ratings")
      iso = array[i+1];
   //หา Focal length ครับ
   if(array=="Focal Length")
      length = array[i+1];
   i++;
}

//เอาค่าที่ได้มาใส่ใน text layer
var textStr = "Copyright? by Chi-O\u000Dhttp://pavitchat.multiply.com\u000D";
textStr += model+lens;
textStr += "\u000DISO:"+iso+" Exposure:"+speed;
textStr += "\u000DAperture:"+fstop+" Focal Length:"+length;
txtRef.contents = textStr;
//txtRef.contents = exifData;


แจ้งลบกระทู้นี้หรือติดต่อผู้ดูแล   บันทึกการเข้า

Pramecomix
ศิษย์พี่
ร่มโพธ์ร่มไทร
***
ออฟไลน์ ออฟไลน์

เพศ: ชาย
กระทู้: 1,804


not reply mode


« ตอบ #9 เมื่อ: 16 มิถุนายน 2007, 00:29:00 »

กำ ผมเรียนวิศวคอมฯ ยังงงโค้ด ในหลายๆส่วน  :'(
แจ้งลบกระทู้นี้หรือติดต่อผู้ดูแล   บันทึกการเข้า

ploystudio.multiply.com
ko
ร่มโพธ์ร่มไทร
******
ออฟไลน์ ออฟไลน์

เพศ: ชาย
กระทู้: 3,791


สังคมรังแก จำกัดมหาชน


เว็บไซต์
« ตอบ #10 เมื่อ: 02 กรกฎาคม 2007, 12:08:43 »

 Embarrassed  เพิ่งทราบเหมือนกันครับว่า PS ทำได้   อิๆๆๆ 

ขอบคุณมากครับ 
แจ้งลบกระทู้นี้หรือติดต่อผู้ดูแล   บันทึกการเข้า

jackie11
ศิษย์พี่
ต้นอ่อน
***
ออฟไลน์ ออฟไลน์

เพศ: ชาย
กระทู้: 197


visanu


« ตอบ #11 เมื่อ: 02 กรกฎาคม 2007, 20:32:48 »

 :'( ผมสงสัยต้อง งมอีกหลายวัน ยังงงๆ เลยครับ
แจ้งลบกระทู้นี้หรือติดต่อผู้ดูแล   บันทึกการเข้า

nikon D80
jackie11
ศิษย์พี่
ต้นอ่อน
***
ออฟไลน์ ออฟไลน์

เพศ: ชาย
กระทู้: 197


visanu


« ตอบ #12 เมื่อ: 30 สิงหาคม 2007, 22:02:14 »

เวลาผ่านมาเริ่มเข้าใจบ้าง แล้ว  Wink Wink
แจ้งลบกระทู้นี้หรือติดต่อผู้ดูแล   บันทึกการเข้า

nikon D80
Svl2Nuk3
รุกขเทวดา
ร่มโพธ์ร่มไทร
*****
ออฟไลน์ ออฟไลน์

กระทู้: 1,994



« ตอบ #13 เมื่อ: 10 มกราคม 2008, 17:47:00 »

กำ ผมเรียนวิศวคอมฯ ยังงงโค้ด ในหลายๆส่วน  :'(

พึ่งมาเปิดเจอ  เด๋วขอไปลองสักหน่อย
อย่าว่าแต่พี่เปรมงงเลย  ผมก็งง 
สรุปว่ามันคล้าย  Java  เนอะ  เห็นเป็น  Object
แจ้งลบกระทู้นี้หรือติดต่อผู้ดูแล   บันทึกการเข้า

http://svrnuke.multiply.com   -> เข้าไปเยี่ยมชมกันบ้างนะครับ
หน้า: [1] พิมพ์ 
กระโดดไป:  
Play Free Games Online | Brand name coupons | Free Links Directory | Low Price Shop online | Play Free Games Online
Ripstik Caster Board | Omron Blood Pressure Monitor | Bakugan Battle Arena | Philips Sonicare Toothbrush | Apple iPod Accessories