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

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

?? jpeg.pm

?? 新天堂多用戶相冊系統v2.0B 一款基于GNU許可的免費的多用戶相冊系統
?? PM
字號:
package Image::Info::JPEG;

# Copyright 1999-2000, Gisle Aas.
#
# This library is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.

=begin register

MAGIC: /^\xFF\xD8/

For JPEG files we extract information both from C<JFIF> and C<Exif>
application chunks.

C<Exif> is the file format written by most digital cameras.  This
encode things like timestamp, camera model, focal length, exposure
time, aperture, flash usage, GPS position, etc.  The following web
page contain description of the fields that can be present:

 http://www.ba.wakwak.com/~tsuruzoh/Computer/Digicams/exif-e.html

The C<Exif> spec can be found at:

 http://www.pima.net/standards/it10/PIMA15740/exif.htm

=end register

=cut

use strict;

my %sof = (
   0xC0 => "Baseline",
   0xC1 => "Extended sequential",
   0xC2 => "Progressive",
   0xC3 => "Lossless",
   0xC5 => "Differential sequential",
   0xC6 => "Differential progressive",
   0xC7 => "Differential lossless",
   0xC9 => "Extended sequential, arithmetic coding",
   0xCA => "Progressive, arithmetic coding",
   0xCB => "Lossless, arithmetic coding",
   0xCD => "Differential sequential, arithmetic coding",
   0xCE => "Differential progressive, arithmetic coding",
   0xCF => "Differential lossless, arithmetic coding",
);

sub my_read
{
    my($source, $len) = @_;
    my $buf;
    my $n = read($source, $buf, $len);
    die "read failed: $!" unless defined $n;
    die "short read ($len/$n)" unless $n == $len;
    $buf;
}

sub process_file
{
    my($info, $fh, $cnf) = @_;
    _process_file($info, $fh, 0);
}

sub _process_file
{
    my($info, $fh, $img_no) = @_;

    my $soi = my_read($fh, 2);
    die "SOI missing" unless $soi eq "\xFF\xD8";

    $info->push_info($img_no, "file_media_type" => "image/jpeg");
    $info->push_info($img_no, "file_ext" => "jpg");

    while (1) {
        my($ff, $mark, $len) = unpack("CCn", my_read($fh, 4));
        last if $ff != 0xFF;
        last if $mark == 0xDA || $mark == 0xD9;  # SOS/EOI
	last if $len < 2;
        process_chunk($info, $img_no, $mark, my_read($fh, $len - 2));
    }
}

sub process_chunk
{
    my($info, $img_no, $mark, $data) = @_;
    #printf "MARK 0x%02X, len=%d\n", $mark, length($data);

    if ($mark == 0xFE) {
        $info->push_info($img_no, Comment => $data);
    }
    elsif ($mark >= 0xE0 && $mark <= 0xEF) {
        process_app($info, $mark, $data) if $img_no == 0;
    }
    elsif ($sof{$mark}) {
        my($precision, $height, $width, $num_comp) =
            unpack("CnnC", substr($data, 0, 6, ""));
	$info->push_info($img_no, "JPEG_Type", $sof{$mark});
	$info->push_info($img_no, "width", $width);
	$info->push_info($img_no, "height", $height);

	for (1..$num_comp) {
	    $info->push_info($img_no, "BitsPerSample", $precision);
	}
	$info->push_info($img_no, "SamplesPerPixel" => $num_comp);

	# XXX need to consider JFIF/Adobe markers to determine this...
	if ($num_comp == 1) {
	    $info->push_info($img_no, "color_type" => "Gray");
	}
	elsif ($num_comp == 3) {
	    $info->push_info($img_no, "color_type" => "YCbCr");  # or RGB ?
	}
	elsif ($num_comp == 4) {
	    $info->push_info($img_no, "color_type" => "CMYK");  # or YCCK ?
	}

	if (1) {
	    my %comp_id_lookup = ( 1 => "Y",
				   2 => "Cb",
				   3 => "Cr",
				   82 => "R",
				   71 => "G",
				   66 => "B" );
	    while (length($data)) {
		my($comp_id, $hv, $qtable) =
		    unpack("CCC", substr($data, 0, 3, ""));
		my $horiz_sf = $hv >> 4 & 0x0f;
		my $vert_sf = $hv & 0x0f;
		$comp_id = $comp_id_lookup{$comp_id} || $comp_id;
		$info->push_info($img_no, "ColorComponents",  [$comp_id, $hv, $qtable]);
		$info->push_info($img_no, "ColorComponentsDecoded", 
				 { ComponentIdentifier => $comp_id, 
				   HorizontalSamplingFactor => $horiz_sf, 
				   VerticalSamplingFactor => $vert_sf, 
				   QuantizationTableDesignator => $qtable } );
	    }
	}
    }
}

sub process_app
{
    my($info, $mark, $data) = @_;
    my $app = $mark - 0xE0;
    my $id = substr($data, 0, 5, "");
    #$info->push_info(0, "Debug", "APP$app $id");
    $id = "$app-$id";
    if ($id eq "0-JFIF\0") {
	process_app0_jfif($info, $data);
    }
    elsif ($id eq "0-JFXX\0") {
	process_app0_jfxx($info, $data);
    }
    elsif ($id eq "1-Exif\0") {
	process_app1_exif($info, $data);
    }
    elsif ($id eq "14-Adobe") {
	process_app14_adobe($info, $data);
    }
    else {
	$info->push_info(0, "App$id", $data);
	#printf "  %s\n", Data::Dump::dump($data);
    }
}

sub process_app0_jfif
{
    my($info, $data) = @_;
    if (length $data < 9) {
	$info->push_info(0, "Debug", "Short JFIF chunk");
	return;
    }
    my($ver_hi, $ver_lo, $unit, $x_density, $y_density, $x_thumb, $y_thumb) =
	unpack("CC C nn CC", substr($data, 0, 9, ""));
    $info->push_info(0, "JFIF_Version", sprintf("%d.%02d", $ver_hi, $ver_lo));

    my $res = $x_density != $y_density || !$unit
	? "$x_density/$y_density" : $x_density;

    if ($unit) {
	$unit = { 0 => "pixels",
		  1 => "dpi",
		  2 => "dpcm"
		}->{$unit} || "jfif-unit-$unit";
	$res .= " $unit";
    }
    $info->push_info(0, "resolution", $res);

    if ($x_thumb || $y_thumb) {
	$info->push_info(1, "width", $x_thumb);
	$info->push_info(1, "height", $y_thumb);
	$info->push_info(1, "ByteCount", length($data));
    }
}

sub process_app0_jfxx
{
    my($info, $data) = @_;
    my($code) = ord(substr($data, 0, 1, ""));
    $info->push_info(1, "JFXX_ImageType",
		     { 0x10 => "JPEG thumbnail",
		       0x11 => "Bitmap thumbnail",
		       0x13 => "RGB thumbnail",
		     }->{$code} || "Unknown extention code $code");

    if ($code == 0x10) {
	eval {
	    require IO::String;
	    my $thumb_fh = IO::String->new($data);
	    _process_file($info, $thumb_fh, 1);
	};
	$info->push_info(1, "error" => $@) if $@;
    }
}

sub process_app1_exif
{
    my($info, $data) = @_;
    my $null = substr($data, 0, 1, "");
    if ($null ne "\0") {
	$info->push_info(0, "Debug", "Exif chunk does not start with \\0");
	return;
    }

    require Image::TIFF;
    my $t = Image::TIFF->new(\$data);

    for my $i (0 .. $t->num_ifds - 1) {
	my $ifd = $t->ifd($i);
	for (@$ifd) {
	    $info->push_info($i, $_->[0], $_->[3]);
	}

	# If we find JPEGInterchangeFormat/JPEGInterchangeFormatLngth,
	# then we should apply process_file kind of recusively to extract
	# information of this (thumbnail) image file...
	if (my($ipos) = $info->get_info($i, "JPEGInterchangeFormat", 1)) {
	    my($ilen) = $info->get_info($i, "JPEGInterchangeFormatLngth", 1);
	    die unless $ilen;
	    my $jdata = substr($data, $ipos, $ilen);
	    #$info->push_info($i, "JPEGImage" => $jdata);

	    require IO::String;
	    my $fh = IO::String->new($jdata);
	    _process_file($info, $fh, $i);
	}

	# Turn XResolution/YResolution into 'resolution'
	my($xres) = $info->get_info($i, "XResolution", 1);
	my($yres) = $info->get_info($i, "YResolution", 1);
	my($unit) = $info->get_info($i, "ResolutionUnit", 1);
	my $res = "1/1";  # default;
	if ($xres && $yres) {
	    $res = ($xres == $yres) ? $xres : "$xres/$yres";
	}
	$res .= " $unit" if $unit && $unit ne "pixels";
	$info->push_info($i, "resolution", $res);
    }
}

sub process_app14_adobe
{
    my($info, $data) = @_;
    my($version, $flags0, $flags1, $transform) = unpack("nnnC", $data);
    $info->push_info(0, "AdobeTransformVersion" => $version);
    $info->push_info(0, "AdobeTransformFlags" => [$flags0, $flags1]);
    $info->push_info(0, "AdobeTransform" => $transform);
}

1;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99精品视频一区| 国产91在线看| 亚洲资源中文字幕| 亚洲少妇屁股交4| 国产精品久久久爽爽爽麻豆色哟哟 | 久久久亚洲高清| 精品国产乱码久久久久久浪潮| 欧美在线观看一二区| 91成人国产精品| 一本色道**综合亚洲精品蜜桃冫| 99久久综合99久久综合网站| 91在线精品一区二区| 日本高清不卡aⅴ免费网站| 欧美日韩中文字幕一区| 91精品国产一区二区人妖| 日韩精品一区二区三区在线观看 | 日韩高清国产一区在线| 免费人成在线不卡| 精品一区二区三区免费播放| 国产精品一卡二卡| 色综合激情久久| 欧美一区二区黄色| 欧美国产日韩亚洲一区| 一区二区三区欧美| 免费成人小视频| 成人激情动漫在线观看| 欧美视频在线一区二区三区| 日韩欧美国产综合| 国产精品丝袜久久久久久app| 尤物av一区二区| 久久福利视频一区二区| 99精品久久只有精品| 欧美久久久影院| 国产精品嫩草影院com| 亚洲高清久久久| 国产成人在线免费| 欧美美女bb生活片| 中文字幕电影一区| 美腿丝袜在线亚洲一区| 成人免费不卡视频| 欧美一级搡bbbb搡bbbb| 成人欧美一区二区三区1314 | 亚洲视频网在线直播| 青青草原综合久久大伊人精品| av不卡免费电影| 精品第一国产综合精品aⅴ| 一区二区三区在线影院| 国产精品羞羞答答xxdd| 91精品国产色综合久久不卡电影| 国产精品免费看片| 韩国av一区二区三区| 欧美日韩日日夜夜| 亚洲免费看黄网站| bt欧美亚洲午夜电影天堂| 精品国产第一区二区三区观看体验 | www国产成人免费观看视频 深夜成人网| 亚洲人成精品久久久久久| 精品在线一区二区| 在线播放欧美女士性生活| 亚洲日本成人在线观看| 国产成人精品免费视频网站| 日韩欧美一区在线| 天天综合网 天天综合色| 91久久精品网| 亚洲精品成人天堂一二三| 国产91丝袜在线播放九色| 久久综合九色综合欧美亚洲| 麻豆精品在线看| 欧美一区二区三区在线电影 | 高清免费成人av| 欧美大片日本大片免费观看| 日本欧美在线观看| 91精品国产91久久久久久最新毛片| 亚洲成人中文在线| 欧美一区二区三区人| 日韩高清国产一区在线| 日韩片之四级片| 久久精品国产一区二区| 91精品国产色综合久久ai换脸| 日本不卡不码高清免费观看| 884aa四虎影成人精品一区| 日本成人中文字幕| 欧美精品一区二区三区四区 | 色一区在线观看| 一区二区三区高清不卡| 精品视频免费在线| 日本三级韩国三级欧美三级| 精品剧情在线观看| 成人丝袜18视频在线观看| 18欧美乱大交hd1984| 欧美日韩一区三区四区| 蜜臂av日日欢夜夜爽一区| 日本一区二区三区免费乱视频| 成人国产精品免费观看| 亚洲一区二区三区爽爽爽爽爽| 3atv在线一区二区三区| 韩国精品一区二区| 成人免费一区二区三区在线观看 | 美女视频一区在线观看| 久久久美女艺术照精彩视频福利播放| 国产成人免费av在线| 夜夜精品浪潮av一区二区三区| 91精品国产aⅴ一区二区| 成人激情动漫在线观看| 午夜精品久久久久久久久久久| 精品免费国产一区二区三区四区| 国产a级毛片一区| 天堂一区二区在线免费观看| 久久久91精品国产一区二区三区| 一本色道久久综合亚洲aⅴ蜜桃| 欧美aaa在线| 亚洲桃色在线一区| 久久综合成人精品亚洲另类欧美| 99视频精品全部免费在线| 日日摸夜夜添夜夜添亚洲女人| 欧美激情中文字幕| 欧美一级二级三级蜜桃| 色婷婷狠狠综合| 国内一区二区在线| 天天色天天爱天天射综合| 国产人成亚洲第一网站在线播放| 在线亚洲精品福利网址导航| 国产乱理伦片在线观看夜一区| 亚洲二区在线视频| 国产精品久久久久久久久免费桃花 | 狠狠色丁香久久婷婷综合_中| 亚洲欧美日韩国产综合在线| 久久亚区不卡日本| 欧美一区二区视频在线观看2020 | 欧美成va人片在线观看| 一本一本大道香蕉久在线精品| 国产中文一区二区三区| 日韩精品电影一区亚洲| 亚洲精品午夜久久久| 中文字幕日本乱码精品影院| 久久精品视频在线看| 日韩欧美激情在线| 日韩欧美第一区| 欧美一级理论片| 91精品国产aⅴ一区二区| 欧美日韩黄视频| 欧美视频中文字幕| 91福利视频久久久久| 日本精品一区二区三区高清 | 国产亚洲一区二区三区在线观看 | 丝袜美腿成人在线| 亚洲va欧美va人人爽午夜| 亚洲天堂久久久久久久| 中文字幕一区免费在线观看| 国产视频视频一区| 亚洲国产成人在线| 亚洲视频一区二区在线| 亚洲精品日产精品乱码不卡| 亚洲综合小说图片| 亚洲va国产天堂va久久en| 肉肉av福利一精品导航| 久久精品国产99久久6| 六月丁香综合在线视频| 国内精品免费在线观看| 成人福利电影精品一区二区在线观看| 成人美女视频在线看| 97久久精品人人澡人人爽| 99久久精品国产精品久久| 91搞黄在线观看| 欧美一区二区三区四区久久| 日韩一二三区视频| 久久免费的精品国产v∧| 国产精品久久三区| 亚洲综合男人的天堂| 日韩av电影一区| 国产jizzjizz一区二区| 色国产精品一区在线观看| 欧美精品自拍偷拍动漫精品| 欧美成人精品高清在线播放| 久久精品综合网| 一区二区高清在线| 久久91精品久久久久久秒播| 国产精品一区二区久久不卡 | 日韩毛片精品高清免费| 亚洲成人免费看| 久久成人免费电影| 9l国产精品久久久久麻豆| 欧美日韩亚洲综合| 国产视频亚洲色图| 天使萌一区二区三区免费观看| 狠狠色综合播放一区二区| 一本久道久久综合中文字幕| 欧美丰满一区二区免费视频| 国产亚洲欧美色| 亚洲国产精品久久艾草纯爱| 国产综合久久久久久鬼色| 欧洲一区二区av| 国产女主播视频一区二区| 日日夜夜免费精品视频| 99视频有精品| 久久久久久久久97黄色工厂| 一区二区三区欧美在线观看| 精品一区二区三区免费毛片爱| 欧美日韩免费高清一区色橹橹| 亚洲国产成人一区二区三区|