Personal tools
You are here: Home Zope&Plone Tips ファイル置き場 getEXIF_Filter(EXIF修正版)
Document Actions

getEXIF_Filter(EXIF修正版)

by maru last modified 2006-10-27 21:17

ATPhotoでEXIF情報表示正常化&簡素化で追加(/portal_skins/custom/getEXIF_Filter)

Click here to get the file

Size 12.2 kB - File type text/plain

File contents

# ATPhotoのEXIF情報をふぃるたりんぐ(取りあえずDSCのやつだけ)

#### Define Function #####
def get_src_item( src_dict, name ) :
  return src_dict.get( name, 'None' )

def set_tgt_item( tgt_dict, name, val, chgdict='None' ) :
  setval = val
  if (chgdict != 'None') and (setval != 'None') :
    setval = chgdict.get( val, val )

  if setval != 'None' :
    tgt_dict[name] = setval
#### Define Function #####

new_data = {}

#にほんごへんかんてーぶる(必殺ゴリ押しろじっくw)
### WhiteBalance Dict ###
WhiteBalance_TAGS={
#Common
  'Auto'        : '自動',      #Nikon,Casio,FUJI,Canon
  'Cloudy'      : '曇り',      #Nikon,FUJI,Canon
  'Daylight'    : '太陽光',    #Nikon,FUJI,Casio
  'Custom'      : 'カスタム',  #FUJI,Canon
  'Tungsten'    : '電球',      #Casio,Canon
  'Fluorescent' : '蛍光灯',    #Nikon,Casio,Canon
  'Shade'       : '日陰',      #Casio,Canon
  'Incandescent': '電球',      #Nikon,FUJI
#NIKON
  'Preset'      : 'プリセット',
  'Speed Light' : 'ストロボ',
#Casio
  'Manual'      : 'マニュアル',
#FUJIFILM
  'DaylightColor-Fluorescent' : '昼光色蛍光灯',
  'DaywhiteColor-Fluorescent' : '昼白色蛍光灯',
  'White-Fluorescent'         : '白色蛍光灯',
#CANON
  'Sunny'       : '晴天',
  'Flash'       : 'ストロボ',
  'B&H'         : '白黒',
  'K'           : 'K',
  'Fluoresent H' : '蛍光灯H',
  'InWater'     : '水中',
}

### Flash Dict ###
Flash_TAGS={
  'No'              : '発光禁止',
  'Fired'           : '発光',
  'Fill Fired'      : '発光',
  'Off'             : '非発光',
  'Auto Off'        : '自動非発光',
  'Auto Fired'      : '自動発光',
#上記以外はメドイのでやんない
}

### FlashSetting Dict for Nikon ###
# Asciiなのでやんない

### FlashMode Dict for CASIO,FUJI,CANON ###
FlashMode_MAKER_TAGS={
#COMMON
  'Auto' : '自動',
  'On'   : 'ON',
  'Off'  : 'OFF',
  'Red Eye Reduction' : '赤目軽減',
#CANON
  'Flash Not Fired'          : '非発光',
  'Slow Synchro'             : 'スローシンクロ',
  'Auto + Red Eye Reduction' : '自動(赤目軽減)',
  'On + Red Eye Reduction'   : 'ON(赤目軽減)',
  'external flash'           : '外部フラッシュ'
}

### FlashIntensity Dict for CASIO ###
FlashIntensity_CASIO_TAGS={
  'Weak'   : '弱',
  'Normal' : '普通',
  'Strong' : '強'
}

### FlashDetails Dict for Canon ###
FlashDetails_CANON_TAGS={
  'External E-TTL' : '外部E-TTL',
  'Internal Flash' : '内蔵フラッシュ',
  'FP Sync Used'   : 'FPシンクロ使用',
  '2nd("Rear")-Curtain Sync Used' : '2nd("Rear")-Curtain Sync Used',
  'FP Sync Enabled'               : 'FPシンクロ可'
}

### ExposureProgram Dict ###
ExposureProgram_TAGS={
  'Unidentified'      : '未定義',
  'Manual'            : 'マニュアル',
  'Program Normal'    : '通常プログラム',
  'Aperture Priority' : '絞り優先',
  'Shutter Priority'  : 'シャッター速度優先',
  'Program Creative'  : '低速プログラム',
  'Program Action'    : '高速プログラム',
  'Portrait Mode'     : 'ポートレート',
  'Landscape Mode'    : '風景'
}

### ExposureProgram(MakerNote) Dict for All ###
ExposureProgram_MAKER_TAGS={
#COMMON
  'Portrait'       : 'ポートレート',
  'Landscape'      : '風景',
#CASIO(RecordingMode)
  'Single Shutter' : 'シングル',
  'Panorama'       : 'パノラマ',
  'Night Scene'    : '夜景',
#FUJI(PictureMode)
  'Auto'           : '自動',
  'Sports'         : 'スポーツ',
  'Night'          : '夜景',
  'Program AE'     : 'プログラム',
  'Aperture Priority AE' : '絞り優先',
  'Shutter Priority AE'  : 'シャッター速度優先',
  'Manual Exposure'      : 'マニュアル',
#CANON(ExposureMode)
  'Easy Shooting' : 'イメージセレクト',
  'Program'       : 'プログラム',
  'Tv-priority'   : 'シャッター速度優先',
  'Av-priority'   : '絞り優先',
  'Manual'        : 'マニュアル',
  'A-DEP'         : '自動被写界深度'
}

### EasyShootingMode Dict for CANON ###
EasyShootingMode_CANON_TAGS={
  'Full Auto'       : 'フルオート',
  'Manual'          : 'マニュアル',
  'Landscape'       : '風景',
  'Fast Shutter'    : '高速シャッター',
  'Slow Shutter'    : 'スローシャッター',
  'Night'           : '夜景',
  'B&W'             : '白黒',
  'Sepia'           : 'セピア',
  'Portrait'        : 'ポートレート',
  'Sports'          : 'スポーツ',
  'Macro/Close-Up'  : 'マクロ',
  'Pan Focus'       : 'パンフォーカス',
  'Prohibit Flash'  : 'ストロボ発光禁止',
  'Super Macro'     : 'スーパーマクロ',
  'Night Snap'      : 'ナイトスナップ',
  'Still Image'     : 'スチルイメージ'
}

### MeteringMode Dict (Add CANON) ###
MeteringMode_TAGS={
  'Unidentified'          : '未定義',
  'Average'               : '平均測光',
  'CenterWeightedAverage' : '中央重点',
  'Spot'                  : 'スポット',
  'MultiSpot'             : '多点スポット',
  'MultiSegment'          : 'マルチセグメント',
  'Partial'               : '部分測光',
  'Other'                 : 'その他',
#CANON
  'Evaluative'            : '評価測光',
  'Partial'               : '中央部部分測光',
  'Center-weighted'       : '中央部重点平均測光'
}

### FocusMode Dict for All ###
FocusMode_MAKER_TAGS={
#NIKON(Asciiなのでやんない)
#CASIO
  'Macro'        : 'マクロ',
  'Auto Focus'   : 'AF',
  'Manual Focus' : 'MF',
  'Infinity'     : '無限遠',
#FUJI
  'Auto'         : 'AF',
  'Manual'       : 'MF',
#CANON
  'One-Shot'     : 'ONE SHOT AF',
  'AI Servo'     : 'AI SERVO AF',
  'AI Focus'     : 'AI FOCUS AF',
  'MF'           : 'MF',
  'Single'       : '単体AF',
  'Continuous'   : '連続AF'
}

### ContinuousDriveMode Dict for CANON ###
ContinuousDriveMode_CANON_TAGS={
  'Single Or Timer'    : '1コマ撮影',
  'Continuous'         : '連続撮影',
  'Self Timer'         : 'タイマ',
  'SpeedPriContinuous' : '速度優先連続',
  'SlowContinuous'     : '低速連続',
  'FastContinuous'     : '高速連続'
}

# Initialize
make = get_src_item( data, 'Image Make' )

# 機種名(Image Model)
name = '機種名'
set_tgt_item( new_data, name, get_src_item( data, 'Image Model' ) )

# 撮影日付(DateTime)
name = '撮影日付'
#tmp = get_src_item( data, 'Image DateTime' )
tmp = get_src_item( data, 'EXIF DateTimeOriginal' )
if tmp == 'None' :
  tmp = get_src_item( data, 'EXIF DateTime' )
set_tgt_item( new_data, name, tmp )

# シャッター速度(Tv)
name = 'シャッター速度'
tmp = get_src_item( data, 'EXIF ExposureTime' )
if tmp == 'None' :
  tmp = get_src_item( data, 'EXIF ShutterSpeedValue' )
  if (tmp == 'None') and (make == 'Canon') :
    tmp = get_src_item( data, 'MakerNote ExposureTime' )
set_tgt_item( new_data, name, tmp )

# 絞り値(Av)
name = '絞り値'
tmp = get_src_item( data, 'EXIF FNumber' )
if tmp == 'None' :
  tmp = get_src_item( data, 'EXIF ApertureValue' )
  if (tmp == 'None') and (make == 'Canon') :
    tmp = get_src_item( data, 'MakerNote ApertureValue' )
set_tgt_item( new_data, name, tmp )

# ISO(ISO)
name = 'ISO'
tmp = get_src_item( data, 'EXIF ISOSpeedRatings' )
if tmp == 'None' :
  if make in ('NIKON', 'NIKON CORPORATION') :
    tmp = get_src_item( data, 'MakerNote ISOSetting' )
  if make == 'Canon':
    tmp = get_src_item( data, 'MakerNote ISO' )
set_tgt_item( new_data, name, tmp )

# 焦点距離(FocalLength)
name = '焦点距離'
set_tgt_item( new_data, name, get_src_item( data, 'EXIF FocalLength' ) )

# 露出補正値(ExposureBiasValue)
name = '露出補正値'
set_tgt_item( new_data, name, get_src_item( data, 'EXIF ExposureBiasValue' ) )

#ホワイトバランス(WhiteBalance)
name = 'ホワイトバランス'
tmp = get_src_item( data, 'MakerNote WhiteBalance' )
if (make == 'Canon') and (tmp == 'K') :
  tmp = "%s %s" % (get_src_item(data, 'MakerNote WBK'), tmp)
set_tgt_item( new_data, name, tmp, WhiteBalance_TAGS )

#フラッシュ情報(Flash)
name = 'フラッシュ'
flash = data.get('EXIF Flash', 'None')
set_tgt_item( new_data, name, flash, Flash_TAGS )

#機種別フラッシュ情報(MakerNote FlashInfo)
if flash in ('Fired','Fill Fired','Auto Fired' ) :

  if make in ('NIKON', 'NIKON CORPORATION') :
    name = '発光設定'
    set_tgt_item( new_data, name, get_src_item( data, 'MakerNote FlashSetting' ) )

  if make == 'Casio' :
    name = '発光モード'
    set_tgt_item( new_data, name, get_src_item( data, 'MakerNote FlashMode' ), FlashMode_MAKER_TAGS )
    name = '発光強度'
    set_tgt_item( new_data, name, get_src_item( data, 'MakerNote FlashIntensity' ), FlashIntensity_CASIO_TAGS )

  if make == 'FUJIFILM':
    name = '発光モード'
    set_tgt_item( new_data, name, get_src_item( data, 'MakerNote FlashMode' ), FlashMode_MAKER_TAGS )
    name = '発光補正値'
    set_tgt_item( new_data, name, get_src_item( data, 'MakerNote FlashStrength' ) )

  if make == 'Canon':
    name = '発光モード'
    set_tgt_item( new_data, name, get_src_item( data, 'MakerNote FlashMode' ), FlashMode_MAKER_TAGS )
    name = 'フラッシュ詳細'
    set_tgt_item( new_data, name, get_src_item( data, 'MakerNote FlashDetails' ), FlashDetails_CANON_TAGS )
    name = '発光補正値'
    set_tgt_item( new_data, name, get_src_item( data, 'MakerNote FlashBias' ) )

# 露出制御モード(ExposureProgram)
name = '露出制御モード'
tmp = get_src_item( data, 'EXIF ExposureProgram' )
if tmp == 'None' :
  if make == 'Casio' :
    set_tgt_item( new_data, name, get_src_item( data, 'MakerNote RecordingMode' ), ExposureProgram_MAKER_TAGS )
  if make == 'FUJIFILM':
    set_tgt_item( new_data, name, get_src_item( data, 'MakerNote PictureMode' ), ExposureProgram_MAKER_TAGS )
  if make == 'Canon':
    tmp = get_src_item( data, 'MakerNote ExposureMode' )
    if tmp == 'Easy Shooting' :
      mode = get_src_item( data, 'MakerNote EasyShootingMode' )
      tmp = "%s(%s)" % (ExposureProgram_MAKER_TAGS.get(tmp, tmp), 
                        EasyShootingMode_CANON_TAGS.get(mode,mode) )
      set_tgt_item( new_data, name, tmp )
    else :
      set_tgt_item( new_data, name, tmp, ExposureProgram_MAKER_TAGS )
else :
  set_tgt_item( new_data, name, tmp, ExposureProgram_TAGS )

# 測光方式(MeteringMode)
name = '測光方式'
exiftmp = get_src_item( data, 'EXIF MeteringMode' )
if make == 'Canon':
  tmp = get_src_item( data, 'MakerNote MeteringMode' )
  if tmp != 'None' :
    exiftmp = tmp
set_tgt_item( new_data, name, exiftmp, MeteringMode_TAGS )

# AFモード(AF Mode)
name = 'AFモード'
tmp = 'None'
if make in ('NIKON', 'NIKON CORPORATION') :
  tmp = get_src_item( data, 'MakerNote FocusMode' )
if make == 'Casio' :
  tmp = get_src_item( data, 'MakerNote FocusingMode' )
if make == 'FUJIFILM':
  tmp = get_src_item( data, 'MakerNote FocusMode' )
if make == 'Canon':
  tmp = get_src_item( data, 'MakerNote FocusMode' )
set_tgt_item( new_data, name, tmp, FocusMode_MAKER_TAGS )

# マクロモード(Macro Mode)
name = 'マクロモード'
tmp = 'None'
if make[:7] == 'OLYMPUS' :
  tmp = get_src_item( data, 'MakerNote Macro' )
if make == 'Casio' :
  tmp = "AFモード参照"
if make == 'FUJIFILM':
  tmp = get_src_item( data, 'MakerNote Macro' )
if make == 'Canon':
  tmp = get_src_item( data, 'MakerNote Macromode' )
set_tgt_item( new_data, name, tmp )

# ドライブモード(Drive Mode) Canon Only
name = 'ドライブモード'
set_tgt_item( new_data, name, get_src_item( data, 'MakerNote ContinuousDriveMode' ), ContinuousDriveMode_CANON_TAGS )

# 最小F値(MaxApertureValue)
name = '最小F値'
tmp = data.get('EXIF MaxApertureValue', 'None')
if tmp != 'None' :
  new_data[name] = tmp

# レンズ(LensInfo)
name = 'レンズ'
tmp_s = data.get('MakerNote ShortFocalLengthOfLensInFocalUnits','None')
tmp_l = data.get('MakerNote LongFocalLengthOfLensInFocalUnits','None')
if (tmp_s != 'None') and (tmp_l != 'None') : 
  if tmp_s == tmp_l :
    new_data[name] = "%s(単焦点)" % (tmp_s)
  else :
    tmp_s = tmp_s.replace('mm','')
    new_data[name] = "%s-%s" % (tmp_s, tmp_l)

#new_data.keys.sort()

return new_data