`
diding
  • 浏览: 81640 次
  • 性别: Icon_minigender_1
  • 来自: 四川
社区版块
存档分类
最新评论

AS3获取Jpg图像长宽

    博客分类:
  • Flex
阅读更多
一个老外的比较有用的类,自已整合到自已的utls包中:
1.用法:
import flash.events.Event;
import net.diding.utils.JPGSizeExtractor;

private var je:JPGSizeExtractor;

private function DDinit():void
{
	je=new JPGSizeExtractor();
	je.addEventListener(JPGSizeExtractor.PARSE_COMPLETE, sizeHandler);
	je.extractSize("http://192.168.1.102/buzzword/bin-debug/hpde.jpg");
}

private function sizeHandler(e:Event):void
{
	trace("Dimensions: " + je.width + " x " + je.height);
}



2.类源文件:JPGSizeExtractor.as
package net.diding.utils
{
	import flash.net.URLStream;
	import flash.net.URLRequest;
	import flash.events.Event;
	import flash.events.ProgressEvent;
	import flash.utils.Endian;

	public class JPGSizeExtractor extends URLStream
	{
		protected static const SOF0:Array=[0xFF, 0xC0, 0x00, 0x11, 0x08];
		public static const PARSE_COMPLETE:String="parseComplete";
		public static const PARSE_FAILED:String="parseFailed";
		protected var dataLoaded:uint;
		protected var jpgWidth:uint;
		protected var jpgHeight:uint;
		protected var jumpLength:uint;
		protected var stopWhenParseComplete:Boolean;
		protected var traceDebugInfo:Boolean;

		public function JPGSizeExtractor()
		{
			endian=Endian.BIG_ENDIAN;
		}

		protected function jumpBytes(count:uint):void
		{
			for (var i:uint=0; i < count; i++)
			{
				readByte();
			}
		}

		protected function progressHandler(e:ProgressEvent):void
		{
			dataLoaded=bytesAvailable;
			var APPSections:Array=new Array();
			for (var i:int=1; i < 16; i++)
			{
				APPSections[i]=[0xFF, 0xE0 + i];
			}
			var index:uint=0;
			var byte:int=0;
			var address:int=0;
			while (bytesAvailable >= SOF0.length + 4)
			{
				var match:Boolean=false;
				// Only look for new APP table if no jump is in queue
				if (jumpLength == 0)
				{
					byte=readUnsignedByte();
					address++;
					// Check for APP table
					for each (var APP:Array in APPSections)
					{
						if (byte == APP[index])
						{
							match=true;
							if (index + 1 >= APP.length)
							{
								if (traceDebugInfo)
									trace("APP" + Number(byte - 0xE0).toString(16).toUpperCase() + " found at 0x" + address.toString(16).toUpperCase());
								// APP table found, skip it as it may contain thumbnails in JPG (we don't want their SOF's)
								jumpLength=readUnsignedShort() - 2; // -2 for the short we just read
							}
						}
					}
				}
				// Jump here, so that data has always loaded
				if (jumpLength > 0)
				{
					if (traceDebugInfo)
						trace("Trying to jump " + jumpLength + " bytes (available " + Math.round(Math.min(bytesAvailable / jumpLength, 1) * 100) + "%)");
					if (bytesAvailable >= jumpLength)
					{
						if (traceDebugInfo)
							trace("Jumping " + jumpLength + " bytes to 0x" + Number(address + jumpLength).toString(16).toUpperCase());
						jumpBytes(jumpLength);
						match=false;
						jumpLength=0;
					}
					else
						break; // Load more data and continue
				}
				else
				{
					// Check for SOF
					if (byte == SOF0[index])
					{
						match=true;
						if (index + 1 >= SOF0.length)
						{
							// Matched SOF0
							if (traceDebugInfo)
								trace("SOF0 found at 0x" + address.toString(16).toUpperCase());
							jpgHeight=readUnsignedShort();
							jpgWidth=readUnsignedShort();
							if (traceDebugInfo)
								trace("Dimensions: " + jpgWidth + " x " + jpgHeight);
							removeEventListener(ProgressEvent.PROGRESS, progressHandler); // No need to look for dimensions anymore
							if (stopWhenParseComplete && connected)
								close();
							dispatchEvent(new Event(PARSE_COMPLETE));
							break;
						}
					}
					if (match)
					{
						index++;
					}
					else
					{
						index=0;
					}
				}
			}
		}

		protected function fileCompleteHandler(e:Event):void
		{
			if (!jpgWidth || jpgHeight)
				dispatchEvent(new Event(PARSE_FAILED));
		}

		public function extractSize(fileURL:String, stopWhenParsed:Boolean=true):void
		{
			addEventListener(ProgressEvent.PROGRESS, progressHandler);
			addEventListener(Event.COMPLETE, fileCompleteHandler);
			dataLoaded=0;
			jumpLength=0;
			if (traceDebugInfo)
				trace("Started loading '" + fileURL + "'");
			stopWhenParseComplete=stopWhenParsed;
			super.load(new URLRequest(fileURL));
		}

		public function get loaded():uint
		{
			return dataLoaded;
		}

		public function get width():uint
		{
			return jpgWidth;
		}

		public function get height():uint
		{
			return jpgHeight;
		}

		public function set debug(newDebug:Boolean):void
		{
			traceDebugInfo=newDebug;
		}

		public function get debug():Boolean
		{
			return traceDebugInfo;
		}
	}
}

分享到:
评论

相关推荐

    C++获取jpg和png图像的宽和高

    在C++编程中,获取JPEG和PNG图像的宽度和高度是一项常见的任务,这对于图像处理、图形用户界面(GUI)设计或者任何与图像显示相关的应用都至关重要。这两种图像格式都有其特定的存储结构,因此需要通过解析文件来...

    获取jpg文件宽和高

    c语言实现获取jpg文件属性宽和高 这是专门用于获取jpg文件宽和高的函数,代码相对简单。 源程序里面有测试代码。 先用windows鼠标移到图片上获取图片宽和高的信息,然后和程序读出的数值比较一下,结果数值相等就...

    c++获取jpg图片的尺寸

    在C++编程中,获取JPEG图片的尺寸是一项常见的任务,特别是在图像处理或图形用户界面的应用中。JPEG(Joint Photographic Experts Group)是一种广泛使用的有损压缩图像格式,它能够有效地减少图片的存储空间。要...

    VC 获取图像宽高大小.rar

    在VC++编程环境中,获取图像的宽高大小是图像处理中的基本操作,这对于显示、编辑或分析图像至关重要。本示例程序着重展示了如何在VC++中实现这一功能。"VC 获取图像宽高大小.rar"提供的源码是一个典型的例子,它...

    获取对应打印机纸张长宽的C#类

    本项目“获取对应打印机纸张长宽的C#类”是专门为开发者设计的一个实用工具,它允许程序获取打印机支持的纸张尺寸,以便在打印过程中进行精确的页面布局。这个类库适用于Visual Studio 2012开发环境,且已编译为.NET...

    soft_用ASP判断图像长宽的组件.zip.zip

    这个"soft_用ASP判断图像长宽的组件.zip.zip"文件似乎包含了一个特定的ASP组件,该组件允许开发者在服务器端检查图像文件的尺寸,即宽度和高度。这种功能在很多应用场景中都是必要的,例如在上传图片时进行预处理,...

    图像分割与图像分析(计算目标区域面积、周长、最小外接矩阵及长宽比,含GUI界面)

    编写程序,对灰度图像进行二值分割,并进行 基本的图像分析。(图像可以自行搜集,要求图像中应有多个目 ...3)单独计算目标一的面积、周长。 4)求各个目标的最小外接矩形及长宽比。 5)程序有GUI。

    Halcon学习之六:获取Image图像中Region区域的特征参数.doc

    本篇主要讨论如何从Image图像中的Region区域获取各种特征参数,这对于图像分析、识别和分类至关重要。以下是一些关键函数及其作用的详细说明: 1. **area_center_gray**: 这个函数用于计算Region区域的面积(Area)...

    oracle获取图像属性 宽度 高度 等

    oracle获取图像属性,包含宽度、高度等信息。代码形式是包+函数,可自己扩充获取其他属性的函数。 调用: select blob_img.get_width(t.blob字段), blob_img.get_height(t.blob字段) from 表名t;

    c#获取图片详细信息,音乐以及视频播放时间长度

    通过加载图像文件,我们可以访问其属性来获取元数据,如图像的宽度、高度、格式、创建日期等。以下是一个简单的示例: ```csharp using System.Drawing; Image image = Image.FromFile("path_to_image.jpg"); ...

    在图片加载完毕前js获取图片长宽尺寸

    目前我们常用的获取图片实际宽度高度的方法,要么是在DOM中写入,要么就是等图片加载完毕后才开始获取,用户体验极其不好,今天特意整理一个办法,可以让javascript在html加载完毕后就可以立即获取img文件的头数据...

    jquery在Chrome下获取图片的长宽问题解决

    在JavaScript和jQuery中获取图片的长宽通常是一个简单的任务,但在不同的浏览器环境下,实现方式可能存在差异。这个问题主要集中在Chrome浏览器上,尽管在IE和Firefox中能够正常获取,但在Chrome中可能会遇到问题。...

    VC++实现图像特殊效果

    ② 适合宽度:保持图像长宽比例缩放图像,使图像宽度等于视图宽度。 ③ 适合高度:保持图像长宽比例缩放图像,使图像高度等于视图高度。 ④ 适合屏幕:自动判断图像的显示方式,使图像能在当前视图上完整显示。 ⑶ ...

    MATLAB 图像基本操作

    3. **数字图像处理实验**: - 压缩包中的"数字图像处理实验1_李培毓_1008060047.doc"可能是一个实验报告,涵盖了图像的基本操作,如读取、显示、保存、调整大小、滤波等。这样的实验有助于深入理解图像处理概念。 ...

    数字图像处理习题集.doc

    给定一个长宽比为4:3的图像,如果它具有1600万个像素,那么可以通过以下方式计算分辨率: \[ \text{分辨率} = \sqrt{\frac{\text{总像素数}}{\text{长宽比}}} = \sqrt{\frac{16000000}{4/3}} = \sqrt{3464100} \...

    获取TIF影像的原始纸张大小

    #### 1.2 获取图像尺寸的重要性 在处理图像时,了解图像的实际尺寸是非常重要的。这不仅有助于我们更好地进行图像编辑和处理,还能帮助我们在不同应用场景中正确地展示图像。例如,在印刷行业中,需要确保图像的...

    ACDSee的图像浏览工具

    ② 适合宽度:保持图像长宽比例缩放图像,使图像宽度等于视图宽度。 ③ 适合高度:保持图像长宽比例缩放图像,使图像高度等于视图高度。 ④ 适合屏幕:自动判断图像的显示方式,使图像能在当前视图上完整显示。 ⑶ ...

    matlab图像识别

    访问此类网站可以获取更多实用代码示例、详细教程和深入的理论知识,这对于深入理解MATLAB图像识别技术以及解决实际问题具有重要意义。虽然文档内容的某些部分由于OCR技术识别错误或者漏识别的情况存在,但我们可以...

    屏幕长宽比的发展史和定义标准简介

    例如,传统电视的标准长宽比为4:3,意味着图像的宽度是其高度的1.33倍。在专业领域,尤其是电影行业中,人们更倾向于使用单个数字来表示长宽比,例如4:3被简化为1.33:1,或者直接称为1.33。这种简化的方式便于记忆和...

    数字信号与图像处理.pdf

    ` 这段代码展示了如何读取名为3.jpg的图像文件,并将其显示出来。 其次,文档中出现了`rgb2gray`函数,它是用于将彩色图像转换为灰度图像的。转换后的图像可以用`imhist`函数显示其直方图,以分析图像的灰度分布。 ...

Global site tag (gtag.js) - Google Analytics