AS3 在图片处理方面给我们带来了令人惊奇的功能。其中一个特性就是允许将一个显示对象编码为JPEG格式,当然要感谢JPEG Encoder包含在了AS3 Core Library里面,这让我们可以做一个实际上非常容易的实例。在这篇文章里,我将向你展示如何创建一个Flash文件,并且把一个电影剪辑编码成 JPEG格式,然后允许用户下载这个图片到他们的桌面上。
或许下面这个例子可以给你一些启发,告诉你如何应用这项技术,尝试在上面绘画,然后点击下面的按钮吧。
点击这里查看示例
准备工作
在我们开始之前,请确保你拥有了ActionScript. 3 Core Library。这个类库包含了一些很有用的类,用于简化我们的开发工作,比如MD5加密,日期格式化,图片编码等等。一旦你拥有这个类库,只需将它拖放到你准备好的类文件夹中。现在我们可以引入JPGEncoder。
Actionscript.
import com.adobe.images.JPGEncoder;
编码电影剪辑
在这个示例中,我们假设要被编码的电影剪辑被命名为sketch_mc。在我们使用JPGEncoder之前,这个电影剪辑需要转换为Bitmap 格式。要做到这一点,我们需要使用BitmapData类。这个类的构造器需要接受2个参数:宽度和高度。如果我们希望最后的JPEG图像的大小与 sketch_mc的大小一致,我们可以使用sketch_mc的宽度和高度属性。然后我们把sketch_mc作为一个参数,使用draw函数绘制 Bitmap。
Actionscript.
import com.adobe.images.JPGEncoder;
var jpgSource:BitmapData = new BitmapData (sketch_mc.width, sketch_mc.height);
jpgSource.draw(sketch_mc);
现 在sketch_mc已经是Bitmap的数据来源,我们可以使用JPGEncoder了。在创建这个类的实例的时候,你可以通过传递一个从1到 100的数字来设置压缩比。然后为了创建JPEG图像,我们需要调用encode函数,并且把我们的Bitmap数据作为传递参数。encode函数会以 ByteArray的形式返回JPEG图像,在AS3中编写这些代码是非常容易的。
Actionscript.
import com.adobe.images.JPGEncoder;
var jpgSource:BitmapData = new BitmapData (sketch_mc.width, sketch_mc.height);
jpgSource.draw(sketch_mc);
var jpgEncoder:JPGEncoder = new JPGEncoder(85);
var jpgStream:ByteArray = jpgEncoder.encode(jpgSource);
从FlashPlayer中保存图像到桌面
AS3 已经完成了将电影剪辑编码为JPEG的工作,但是我们还需要一点小小的改动,让它可以真实的下载。要实现这一步,我们需要使用 URLRequest类发布ByteArray数据到一个动态网页中。既然我们要发送二进制数据,就需要设置内容类型为 “application/octet-stream”。当然我们下载文件的时候需要一个文件名称,所以我们为动态网页传递了一个字符串形式的参数。
Actionscript.
import com.adobe.images.JPGEncoder;
var jpgSource:BitmapData = new BitmapData (sketch_mc.width, sketch_mc.height);
jpgSource.draw(sketch_mc);
var jpgEncoder:JPGEncoder = new JPGEncoder(85);
var jpgStream:ByteArray = jpgEncoder.encode(jpgSource);
var header:URLRequestHeader = new URLRequestHeader(”Content-type”, “application/octet-stream”);
var jpgURLRequest:URLRequest = new URLRequest(”jpg_encoder_download.php?name=sketch.jpg”);
jpgURLRequest.requestHeaders.push(header);
jpgURLRequest.method = URLRequestMethod.POST;
jpgURLRequest.data = jpgStream;
navigateToURL(jpgURLRequest, “_blank”);
下面是用于保存JPEG图片的PHP代码。这里我使用了PHP技术,实际上你可以使用任何其它的动态语言。
PHP:
if (isset($GLOBALS["HTTP_RAW_POST_DATA"]))
{
// get bytearray
$jpg = $GLOBALS["HTTP_RAW_POST_DATA"];
// add headers for download dialog-box
header(’Content-Type: image/jpeg’);
header(”Content-Disposition: attachment; filename=”.$_GET[’name’]);
echo $jpg;
}
分享到:
相关推荐
JPEG is one of the most widely used standards for encoding photographs, pictures, or other visual content. But, the internal workings are mostly overlooked. We are used to using image.Save("filename",...
JPEG encoder, 非常小,也很快,适用于embedded application。我已经成功的port到了ARM9上。我的项目是一个scanner,用这个encoder可以实时的用ARM9进行jpeg encoding
JPEG encoder in Verilog
jpeg encoder jpeg编码库 vs 工程 不是libjpeg的工程,c++
JPEG Hardware Compressor Encoder
jpeg encoder and decoder 都很好用,前者的注释清晰,后者就少了一点。
Here is a quite detailed low level design document for the Core: Low Level Design Document for JPEG Encoder
Flash AS3 中文帮助大全。包含 Flash.ActionScript.as3.0 flash_as3_programming flash_cs3_help flash_video_encoder_help
Adobe Flash Media Live Encoder 3.2 用于rtmp流媒体采集,配合red5流媒体服务器使用,好使!!!
很详细的资料,实测可以正确运行,对于理解jpeg压缩原理,图像采集很有用的资料
JPEG 编码器的verilog实现,已经在XILINX SPARTAN6上实现并验证。
linux环境下jpeg编解码算法的实现,非常实用,用途广
JPEG编码源程序,c++编写,内有编译后的exe可执行文件。
Flash Video Encoder用户指南,英文版。
我用VC实现了FlashMediaEncoder的功能: 1,压缩视频成H264格式,压缩音频成AAC格式. 2,音视频数据封装成RTMP包,并向FMS3发送直播流. 3,可录制,保存为MP4格式的文件存放在服务端, 用来点播. 4,使用FlashPlayer可观看...
解决安装OBS后录屏黑屏问题,简单的几个设置就能轻松解决。报错信息:NVENC Error:init_encoder:(NV_ENC_ERR_INVALID_VERSION)
jpeg 编码器 写得不错。我也是网上找的
JPEG_Encoder_src
(This solutions contains examples about video encoders: simplest_vpx_encoder: simplest encoder based on libvpx simplest_x264_encoder: simplest encoder based on libx264 simplest_x265_encoder: simplest ...
JPEG编码硬件加速器,采用DCT算法,其中含有skew circular convolution单元,其构架设计能以精简的电路,同时满足DCT与IDCT的需求。