亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? exiftool.pm

?? 稀飯伊人相冊系統繼承了新天堂多用戶相冊系統的功能
?? PM
?? 第 1 頁 / 共 4 頁
字號:
######################################################  LEO SuperCool BBS / LeoBBS X / 雷傲極酷超級論壇  ####################################################### 基于山鷹(糊)、花無缺制作的 LB5000 XP 2.30 免費版  ##   新版程序制作 & 版權所有: 雷傲科技 (C)(R)2004    #######################################################      主頁地址: http://www.LeoBBS.com/            ##      論壇地址: http://bbs.LeoBBS.com/            ######################################################package ExifTool;use strict;require 5.002;require Exporter;use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);$VERSION = '2.3.6';@ISA = qw(Exporter);@EXPORT_OK = qw(ImageInfo LoadAllTables GetDescriptions GetShortcuts                SetVerbose SetDateFormat EnablePrintConversion                EnableCompositeTags WarnDuplicateTags                SetByteOrder Get16u Get16s Get32u Get32s);sub JpgInfo($);sub TiffInfo($);sub GifInfo($);sub ProcessExif($$);sub ProcessExifDir($$$$$$;$);sub BuildCompositeTags();sub FoundTag($$;$$);sub GetTagInfo($$);sub SaveDescriptions($);sub GetTagTable($);sub TagTableKeys($);sub ExpandShortcuts($);sub ExtractBinary($$;$);sub AddCompositeTags($);sub HexDump($;$%);sub HexDumpTag($$;$%);# extra tags that aren't truly EXIF tags, but are generated by the script%ExifTool::extraTags = (    'Comment'   => { 'Name'=>'Comment'  },    'FileName'  => { 'Name'=>'FileName' },    'FileSize'  => { 'Name'=>'FileSize',  'PrintConv'=>'sprintf("%.0fKB",$val/1024)' },    'ExifData'  => { 'Name'=>'ExifData',  'PrintConv'=>'"(Exif data block)"' },);# public ExifTool variables$ExifTool::verbose = 0;     # flag for verbose printing (1=verbose, 2=very verbose)# byte sizes for the various EXIF format typesmy @formatSize = (0,1,1,2,4,8,1,1,2,4,8,4,8);# other variablesmy %allTables;              # list of all tables loadedmy $swap_bytes;             # set if EXIF header is not native byte orderingmy $native_byte_order;      # native (CPU) byte ordering (0=big endian, 1=little)my %tagValueConv;           # tag values saved after valueConvmy %tagPrintConv;           # tag values saved after printConvmy %compositeTags;          # composite tagsmy %tagDescriptions;        # descriptions for all tagsmy %fileOrder;              # order that tags were found in the filemy $numTagsFound;           # number of tags foundmy $doPrintConversion = 1;  # flag to enable print conversion (PrintConv)my $warnDuplicates;         # flag to warn about duplicate tag namesmy $filename;               # image file namemy $exifData;               # EXIF data blockmy $verbose = 0;            # flag for verbose printing (1=verbose, 2=very verbose)my $doComposite = 1;        # flag to enable composite tagsmy $file_size;              # size of filemy $file_pointer;           # pointer to filemy $requestedTags;          # reference to list of requested tag names (case insensitive)my $date_format;            # format for printed dates (strftime format string)# special tag names (not used for tag info)my %specialTags = ( 'TableType'=>1, 'Format'=>1  ); #------------------------------------------------------------------------------# ImageInfo - return specified information from image file# Inputs: 0) filename#         1-N) list of tag names to find (or tag list reference or options reference)# Returns: reference to hash of tag/value pairs (with "Error" entry on error)# Notes:#   - if no tags names are specified, the values of all tags are returned#   - can pass a reference to list of tags to find, in which case the list#     will be updated with the tags found in the proper case and in the specified#     order.#   - case pass reference to hash specifying options# Options:#   SORT - sort order of returned tags: (INPUT [default], FILE or ALPHA)# Examples:#   my $tags = ExifTool::ImageInfo($file, 'DateTimeOriginal', 'ImageSize');#   my $tags = ExifTool::ImageInfo($file, \@tag_list, { SORT=>'FILE'} );sub ImageInfo($;){    $filename = shift;    my $sortOrder;    # must load our main tag tables to get shortcuts, etc    GetTagTable("TagTables::Exif::Main");    # handle our input arguments    my $arg;    my @tag_args;    while (defined ($arg = shift)) {        if (ref $arg eq 'ARRAY') {            $requestedTags = $arg;        } elsif (ref $arg eq 'HASH') {            $sortOrder = $$arg{'SORT'};        } else {            push @tag_args, $arg;        }    }    if ($requestedTags) {        push @$requestedTags, @tag_args;    } else {        $requestedTags = \@tag_args;    }    # initialize global variables    undef %tagValueConv;    undef %tagPrintConv;    undef %fileOrder;    $numTagsFound = 0;    # expand shortcuts    ExpandShortcuts($requestedTags);    $file_size = -s $filename;    unless (defined $file_size) {        warn "Error opening file $filename\n";        return { Error => 'Error opening file' };    }    my $name = $filename;    $name =~ s/.*\///;  # remove path    FoundTag('FileName', $name);    FoundTag('FileSize', $file_size);    undef $exifData;        # clear current EXIF data    # read tags from the file    if (open(EXIFTOOL_FILE,$filename)) {        $file_pointer = \*EXIFTOOL_FILE;        binmode(EXIFTOOL_FILE);        if ($filename =~ /\.(jpg|jpeg|thm)$/i) {            JpgInfo(\*EXIFTOOL_FILE);        } elsif ($filename =~ /\.gif$/i) {            GifInfo(\*EXIFTOOL_FILE);        } elsif ($filename =~ /\.tiff{0,1}$/i) {            TiffInfo(\*EXIFTOOL_FILE);        } elsif ($filename =~ /\.crw$/i) {            GetTagTable('TagTables::CanonRaw::Main'); # load the raw tables            TagTables::CanonRaw::RawInfo(\*EXIFTOOL_FILE, $requestedTags);        } else {            warn "Unknown image file type $filename\n";        }    } else {        warn "Error opening file $filename\n";        return { Error => 'Error opening file' };    }    # return binary EXIF data block only if requested    FoundTag('ExifData',$exifData) if grep /^ExifData$/i, @$requestedTags;    # calculate composite tags    BuildCompositeTags() if $doComposite;    close(EXIFTOOL_FILE);   # close the file after building composite tags    # generate the return list and assign values to the input hash    my @tags;    if (@$requestedTags) {        # scan through the requested tags and generate list tags we found        my $tag;        foreach $tag (@$requestedTags) {            unless (defined $fileOrder{$tag}) {                # do case-insensitive check                my @matches = (grep /^$tag$/i, keys %fileOrder);                if (@matches) {                    $tag = $matches[0]; # take first match                } else {                    # bogus file order entry to avoid warning if sorting in file order                    $fileOrder{$tag} = 999;                 }            }            push @tags, $tag;        }    } else {        # return all tags since the input hash is empty        @tags = keys %fileOrder;        # use file order by default if no tags specified        # (no such thing as 'INPUT' order in this case)        $sortOrder = 'FILE' unless $sortOrder and $sortOrder eq 'ALPHA';    }    if ($sortOrder and $sortOrder ne 'INPUT') {        my $order;        if ($sortOrder eq 'ALPHA') {            $order = sub { $a cmp $b };        } else {            $order = sub { $fileOrder{$a} <=> $fileOrder{$b} };        }        @$requestedTags = sort $order @tags;    } else {        @$requestedTags = @tags;    }    # build hash of return values    my %returnedTagHash;    foreach (@$requestedTags) {        $returnedTagHash{$_} = $tagPrintConv{$_} if defined $tagPrintConv{$_};    }    return \%returnedTagHash;}#------------------------------------------------------------------------------# load all TagTablessub LoadAllTables(){    # load all of our non-referenced tables    GetTagTable('TagTables::Exif::Main');    GetTagTable('TagTables::CanonRaw::Main');    GetTagTable('TagTables::XMP::Main');    GetTagTable('TagTables::IPTC::Main');    my @tableNames = keys %allTables;    # recursively load all tables referenced by the current tables    while (@tableNames) {        my $tableName = pop @tableNames;        my $table = GetTagTable($tableName);        # look for any SubDirectory tables        foreach (TagTableKeys($table)) {            my @infoArray = GetTagInfoArray($table,$_);            my $tagInfo;            foreach $tagInfo (@infoArray) {                my $subdir = $$tagInfo{'SubDirectory'} or next;                my $tableName = $$subdir{'TagTable'} or next;                next if $allTables{$tableName}; # next if table already loaded                push @tableNames, $tableName;   # must scan this one too            }        }    }}#------------------------------------------------------------------------------# Expand shortcuts# Inputs: 0) reference to list of tagssub ExpandShortcuts($){    my $tagList = shift || return;    # expand shortcuts    my @expandedTags;    my $tag;EXPAND_TAG:    foreach $tag (@$tagList) {        foreach (keys %TagTables::Exif::Shortcuts) {            /^$tag$/i or next;            push @expandedTags, @{$TagTables::Exif::Shortcuts{$_}};            next EXPAND_TAG;        }        push @expandedTags, $tag;    }    @$tagList = @expandedTags;}#------------------------------------------------------------------------------# Access functions# Set verbose messagessub SetVerbose { ++$verbose; ++$ExifTool::verbose; }# Enable warnings about duplicate tagssub WarnDuplicateTags() { $warnDuplicates = 1; }# Get reference to hash of tag descriptionssub GetDescriptions() { return \%tagDescriptions; }# Get reference to shortcuts hashsub GetShortcuts() { return \%TagTables::Exif::Shortcuts; }# Set time formatsub SetDateFormat($) { $date_format = shift; }#------------------------------------------------------------------------------# Enable/Disable print conversion# Inputs: 0) undefined or non-zero to enable print conversion, 0 to disable# Returns: old value of print conversion flagsub EnablePrintConversion{    my $oldVal = $doPrintConversion;    $doPrintConversion = shift;    $doPrintConversion = 1 unless defined $doPrintConversion;    return $oldVal;}#------------------------------------------------------------------------------# Enable/Disable calculation of composite tags# Inputs: 0) undefined or non-zero to enable composite tags, 0 to disable# Returns: old value of composite flagsub EnableCompositeTags{    my $oldVal = $doComposite;    $doComposite = shift;    $doComposite = 1 unless defined $doComposite;    return $oldVal;}#------------------------------------------------------------------------------# Utility routines to for reading binary data values from file# - uses value of $swap_bytes to determine byte ordering#sub Get16(@){    my $template = shift;    my $dataPt = shift;    my $pos = shift || 0;    my $val;    if ($swap_bytes) {        $val = substr($$dataPt,$pos+1,1) . substr($$dataPt,$pos,1);    } else {        $val = substr($$dataPt,$pos,2);    }    defined($val) or return undef;    return unpack($template,$val);}sub Get32(@){    my $template = shift;    my $dataPt = shift;    my $pos = shift || 0;    my $val;    if ($swap_bytes) {        $val = substr($$dataPt,$pos+3,1) . substr($$dataPt,$pos+2,1) .                substr($$dataPt,$pos+1,1) . substr($$dataPt,$pos,1);    } else {        $val = substr($$dataPt,$pos,4);    }    defined($val) or return undef;    return unpack($template,$val);}sub Get64(@){    my $template = shift;    my $dataPt = shift;    my $pos = shift || 0;    my $val;    if ($swap_bytes) {        $val = substr($$dataPt,$pos+7,1) . substr($$dataPt,$pos+6,1) . 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产98色在线|日韩| 奇米影视一区二区三区| 国产精品亚洲人在线观看| 欧美一区二区在线免费播放| 午夜精品久久久久久久久久久| 欧美美女网站色| 人人狠狠综合久久亚洲| 久久综合久久综合九色| 成人app软件下载大全免费| 亚洲欧洲一区二区在线播放| 91麻豆swag| 视频一区免费在线观看| 精品免费99久久| 成人免费视频免费观看| 一区二区三区四区乱视频| 91国在线观看| 麻豆一区二区三区| 中文字幕精品三区| 91高清视频在线| 看国产成人h片视频| 国产日产欧美精品一区二区三区| 91伊人久久大香线蕉| 亚洲成人av中文| 国产亚洲欧美日韩在线一区| 99久久99久久综合| 日日摸夜夜添夜夜添精品视频 | 99精品桃花视频在线观看| 亚洲欧美色一区| 欧美一级理论片| 成人av高清在线| 秋霞电影网一区二区| 日本一区二区三区在线观看| 在线观看视频91| 国产在线精品一区在线观看麻豆| 日韩一区日韩二区| 精品精品欲导航| 欧美天堂一区二区三区| 成人午夜视频免费看| 天天色天天操综合| 亚洲欧美在线高清| 精品免费99久久| 色婷婷激情久久| 国产精品18久久久| 奇米888四色在线精品| 亚洲欧洲国产日韩| 久久综合色天天久久综合图片| 欧美亚洲国产一卡| 成人免费看的视频| 国产综合色产在线精品| 亚洲欧美日韩国产成人精品影院 | 欧美精品 国产精品| 成人污污视频在线观看| 日韩**一区毛片| 亚洲激情在线激情| 中文字幕电影一区| 日韩欧美亚洲国产精品字幕久久久| 91视频精品在这里| 丁香天五香天堂综合| 精品一区二区免费| 午夜精品福利在线| 最新久久zyz资源站| 久久精品免视看| 欧美大片免费久久精品三p| 欧美精品丝袜中出| 欧美午夜片在线观看| 91成人国产精品| 一本久道久久综合中文字幕| 成人中文字幕在线| 国产a级毛片一区| 国产综合久久久久久久久久久久| 日韩精品免费专区| 午夜av一区二区| 午夜精品视频在线观看| 午夜久久久影院| 五月天婷婷综合| 亚洲成人午夜电影| 午夜精品免费在线| 日韩精品一级中文字幕精品视频免费观看 | 在线亚洲免费视频| 91日韩一区二区三区| 99久久精品免费看| 91在线观看美女| 在线观看一区二区精品视频| 一本大道久久精品懂色aⅴ | 国产成人免费在线| 国产99一区视频免费 | 色婷婷综合久久久中文字幕| 91蜜桃传媒精品久久久一区二区| 91亚洲精品一区二区乱码| 色综合久久久久久久久| 91麻豆精品在线观看| 91国产成人在线| 欧美乱熟臀69xxxxxx| 欧美精品久久一区二区三区| 欧美一区二区在线看| 亚洲精品一区二区三区99| 国产午夜精品一区二区| 国产精品乱人伦中文| 亚洲欧美成人一区二区三区| 亚洲国产综合人成综合网站| 日本中文字幕一区二区视频| 国模大尺度一区二区三区| 波多野结衣视频一区| 在线看不卡av| 欧美mv和日韩mv的网站| 国产亲近乱来精品视频| 日韩毛片在线免费观看| 亚洲va欧美va人人爽| 精品中文字幕一区二区| 不卡视频一二三| 欧美日本一区二区| 久久久久久综合| 亚洲麻豆国产自偷在线| 日本不卡视频在线| www.亚洲精品| 欧美日韩一区精品| 久久久亚洲精品石原莉奈| 一区二区三区视频在线观看| 麻豆精品一区二区综合av| 成人app下载| 欧美va亚洲va| 亚洲色图视频网| 久久精品国产一区二区三| 99久久99久久综合| 精品88久久久久88久久久| 偷拍亚洲欧洲综合| 国产精品乡下勾搭老头1| 欧美最新大片在线看| 欧美精品一区二区三| 一区二区三区四区在线免费观看| 国内久久婷婷综合| 精品污污网站免费看| 国产精品五月天| 麻豆一区二区三| 欧美日韩一区二区三区不卡| 中文字幕乱码一区二区免费| 美女任你摸久久| 欧美色网一区二区| 国产精品久久久久影院| 久久成人久久鬼色| 精品污污网站免费看| 中文字幕在线一区免费| 精品在线亚洲视频| 欧美精品vⅰdeose4hd| 亚洲乱码日产精品bd| 国产91高潮流白浆在线麻豆| 日韩欧美一区二区在线视频| 亚洲综合一区二区精品导航| 成人av在线观| 欧美国产精品一区二区| 精品一区二区三区日韩| 欧美性大战久久久久久久蜜臀| 中文字幕在线观看不卡| 国产福利一区二区三区| 精品国产髙清在线看国产毛片 | 日韩三级在线观看| 亚洲国产色一区| 色噜噜狠狠色综合欧洲selulu| 日本一区二区成人在线| 国产精品自拍在线| 精品国产成人系列| 久久99久国产精品黄毛片色诱| 88在线观看91蜜桃国自产| 一级中文字幕一区二区| 91美女福利视频| 一区二区三区影院| 欧美唯美清纯偷拍| 亚洲国产精品一区二区尤物区| 欧洲国内综合视频| 亚洲影院免费观看| 精品1区2区3区| 午夜久久久久久| 欧美一区二区三区视频在线观看| 日韩精品一二三| 日韩欧美一级片| 国产精品18久久久久久久久| 久久久国产午夜精品| 岛国精品一区二区| 成人欧美一区二区三区小说| av一区二区三区黑人| 亚洲日本一区二区三区| 欧美在线免费观看视频| 亚洲午夜私人影院| 日韩欧美一区在线观看| 国内精品国产成人国产三级粉色| 久久久91精品国产一区二区三区| 国产精品一区久久久久| 中文幕一区二区三区久久蜜桃| 91视频免费观看| 日韩激情视频在线观看| 精品少妇一区二区三区免费观看| 韩国欧美国产1区| 国产精品久久久久aaaa樱花 | 成人免费视频视频| 一区二区三区在线观看视频| 欧美日韩不卡一区| 国产在线麻豆精品观看| 亚洲色图欧美偷拍| 678五月天丁香亚洲综合网| 国内久久精品视频|