图片剪切功能:
效果图:
flex代码:
效果图:


flex代码:
<?
xml version="1.0" encoding="utf-8"
?>
< mx:Application xmlns:mx ="http://www.adobe.com/2006/mxml" layout ="absolute" initialize ="init()" xmlns:local ="astion.*" >
< mx:Script >
<![CDATA[
import mx.controls.Image;
import mx.graphics.ImageSnapshot;
import flash.net.FileReference;
import mx.graphics.codec.JPEGEncoder;
import mx.managers.PopUpManager;
import mx.containers.TitleWindow;
import mx.controls.Alert;
import mx.events.CloseEvent;
import mx.core.IFlexDisplayObject;
import mx.utils.*;
import mx.core.Application;
import astion.Dot;
import astion.ScaleBox;
public static const LINE_WIDTH:Number = 1;//缩放边框宽度
private var file:FileReference;
public var IMAGE_URL:String="http://localhost:8080/cutPicuter/aa/aa.jpg";
private var loader:Loader;
private var bmp:Bitmap;
private var stream:URLStream;
public var realPath:String="D:\myWorkSpace\cutPicuter\WebRoot\aa\aa.jpg";
//初始化数据
private function init():void{
this.loader = new Loader();
this.stream = new URLStream();
this.loader.contentLoaderInfo.addEventListener(Event.COMPLETE,this.onComplete);
this.loader.load(new URLRequest(encodeURI(this.IMAGE_URL)));//解决中文乱码
this.stream.load(new URLRequest(encodeURI(this.IMAGE_URL)));
this.stream.addEventListener(Event.COMPLETE,this.onLoaded);
}
private function onLoaded(e:Event):void
{
var bytearray:ByteArray = new ByteArray();
this.stream.readBytes(bytearray);
if(this.stream.connected)
this.stream.close();
this.loader.loadBytes(bytearray);
}
private function onComplete(e:Event):void
{
try
{
this.bmp = this.loader.content as Bitmap;
var showImage:Image= new Image();
showImage.source=this.loader.content;
canvas.addChild(showImage);
canvas.setChildIndex(box,1);
canvas.setChildIndex(showImage,0);
}
catch(e:Error)
{
}
}
//截图,显示缩放选择框
private function doCapture():void{
box.x = 100;
box.y = 100;
box.visible = true;
}
//获取缩放选择框内的图像
private function getImg():BitmapData{
//截取整个区域
box.scaleEnable = false;
var bmp:BitmapData = ImageSnapshot.captureBitmapData(canvas);
box.scaleEnable = true;
//矩形为要截取区域
var re:Rectangle = new Rectangle(box.x+LINE_WIDTH,box.y+LINE_WIDTH,box.boxWidth-LINE_WIDTH,box.boxHeight-LINE_WIDTH);
var bytearray:ByteArray = new ByteArray();
//截取出所选区域的像素集合
bytearray = bmp.getPixels(re);
var imgBD:BitmapData = new BitmapData(box.boxWidth-LINE_WIDTH,box.boxHeight-LINE_WIDTH);
//当前的bytearray.position为最大长度,要设为从0开始读取
bytearray.position=0;
var fillre:Rectangle = new Rectangle(0,0,box.boxWidth-LINE_WIDTH,box.boxHeight-LINE_WIDTH);
//将截取出的像素集合存在新的bitmapdata里,大小和截取区域一样
imgBD.setPixels(fillre,bytearray);
return imgBD;
}
//预览图片
private function doScan():void{
var t:TitleWindow = new TitleWindow();
t.showCloseButton=true;
t.addEventListener(CloseEvent.CLOSE,closeWindow);
t.width = box.boxWidth+t.getStyle("borderThickness");
t.height =box.boxHeight+t.getStyle("borderThickness")+t.getStyle("headerHeight");
var img:Image = new Image();
img.width = box.boxWidth;
img.height = box.boxHeight;
img.source = new Bitmap(getImg());
t.addChild(img);
PopUpManager.addPopUp(t,this,true);
PopUpManager.centerPopUp(t);
}
private function closeWindow(e:CloseEvent):void{
var t:TitleWindow = e.currentTarget as TitleWindow;
PopUpManager.removePopUp(t);
}
//保存图片到本地
private function downloadPicture():void{
file=new FileReference();
file.addEventListener(Event.COMPLETE,downloadComplete);
file.save(new JPEGEncoder(80).encode(getImg()),"default.jpg");
}
private function downloadComplete(event:Event):void{
Alert.show("成功保存图片到本地!","提示");
}
//保存图片到服务器即覆盖原来的图片
private function save():void{
Alert.show("是否保存剪切图片?","提示",3, this, function(event:CloseEvent):void {
if (event.detail==Alert.YES){
var request:URLRequest = new URLRequest("http://localhost:8080/cutPicuter/servlet/FileManagerSaveFileServlet?realPath="+encodeURIComponent(StringUtil.trim(realPath)));
request.method=URLRequestMethod.POST;
request.contentType = "application/octet-stream";
request.data = new JPEGEncoder(80).encode(getImg());
var loader:URLLoader = new URLLoader();
loader.load(request);
loader.addEventListener(Event.COMPLETE,saveResult);
}});
}
private function saveResult(event:Event):void{
Application.application.reLoadFolderFiles(realPath.substr(0,realPath.lastIndexOf("\\")));
Alert.show("保存剪切图片成功","提示");
}
]]>
</ mx:Script >
< mx:HBox x ="0" y ="0" >
< mx:LinkButton label ="剪裁" click ="doCapture();" icon ="@Embed('assets/cut.png')" />
< mx:LinkButton label ="预览" click ="doScan();" icon ="@Embed('assets/ok.png')" />
< mx:VRule height ="22" />
< mx:LinkButton label ="保存" click ="save()" icon ="@Embed('assets/save.png')" />
< mx:LinkButton label ="另存为" click ="downloadPicture();" icon ="@Embed('assets/saveAs.png')" />
</ mx:HBox >
< mx:Canvas id ="canvas" y ="23" x ="1" >
< local:ScaleBox id ="box" visible ="false" y ="0" x ="0" width ="100" height ="100" />
</ mx:Canvas >
</ mx:Application >
< mx:Application xmlns:mx ="http://www.adobe.com/2006/mxml" layout ="absolute" initialize ="init()" xmlns:local ="astion.*" >
< mx:Script >
<![CDATA[
import mx.controls.Image;
import mx.graphics.ImageSnapshot;
import flash.net.FileReference;
import mx.graphics.codec.JPEGEncoder;
import mx.managers.PopUpManager;
import mx.containers.TitleWindow;
import mx.controls.Alert;
import mx.events.CloseEvent;
import mx.core.IFlexDisplayObject;
import mx.utils.*;
import mx.core.Application;
import astion.Dot;
import astion.ScaleBox;
public static const LINE_WIDTH:Number = 1;//缩放边框宽度
private var file:FileReference;
public var IMAGE_URL:String="http://localhost:8080/cutPicuter/aa/aa.jpg";
private var loader:Loader;
private var bmp:Bitmap;
private var stream:URLStream;
public var realPath:String="D:\myWorkSpace\cutPicuter\WebRoot\aa\aa.jpg";
//初始化数据
private function init():void{
this.loader = new Loader();
this.stream = new URLStream();
this.loader.contentLoaderInfo.addEventListener(Event.COMPLETE,this.onComplete);
this.loader.load(new URLRequest(encodeURI(this.IMAGE_URL)));//解决中文乱码
this.stream.load(new URLRequest(encodeURI(this.IMAGE_URL)));
this.stream.addEventListener(Event.COMPLETE,this.onLoaded);
}
private function onLoaded(e:Event):void
{
var bytearray:ByteArray = new ByteArray();
this.stream.readBytes(bytearray);
if(this.stream.connected)
this.stream.close();
this.loader.loadBytes(bytearray);
}
private function onComplete(e:Event):void
{
try
{
this.bmp = this.loader.content as Bitmap;
var showImage:Image= new Image();
showImage.source=this.loader.content;
canvas.addChild(showImage);
canvas.setChildIndex(box,1);
canvas.setChildIndex(showImage,0);
}
catch(e:Error)
{
}
}
//截图,显示缩放选择框
private function doCapture():void{
box.x = 100;
box.y = 100;
box.visible = true;
}
//获取缩放选择框内的图像
private function getImg():BitmapData{
//截取整个区域
box.scaleEnable = false;
var bmp:BitmapData = ImageSnapshot.captureBitmapData(canvas);
box.scaleEnable = true;
//矩形为要截取区域
var re:Rectangle = new Rectangle(box.x+LINE_WIDTH,box.y+LINE_WIDTH,box.boxWidth-LINE_WIDTH,box.boxHeight-LINE_WIDTH);
var bytearray:ByteArray = new ByteArray();
//截取出所选区域的像素集合
bytearray = bmp.getPixels(re);
var imgBD:BitmapData = new BitmapData(box.boxWidth-LINE_WIDTH,box.boxHeight-LINE_WIDTH);
//当前的bytearray.position为最大长度,要设为从0开始读取
bytearray.position=0;
var fillre:Rectangle = new Rectangle(0,0,box.boxWidth-LINE_WIDTH,box.boxHeight-LINE_WIDTH);
//将截取出的像素集合存在新的bitmapdata里,大小和截取区域一样
imgBD.setPixels(fillre,bytearray);
return imgBD;
}
//预览图片
private function doScan():void{
var t:TitleWindow = new TitleWindow();
t.showCloseButton=true;
t.addEventListener(CloseEvent.CLOSE,closeWindow);
t.width = box.boxWidth+t.getStyle("borderThickness");
t.height =box.boxHeight+t.getStyle("borderThickness")+t.getStyle("headerHeight");
var img:Image = new Image();
img.width = box.boxWidth;
img.height = box.boxHeight;
img.source = new Bitmap(getImg());
t.addChild(img);
PopUpManager.addPopUp(t,this,true);
PopUpManager.centerPopUp(t);
}
private function closeWindow(e:CloseEvent):void{
var t:TitleWindow = e.currentTarget as TitleWindow;
PopUpManager.removePopUp(t);
}
//保存图片到本地
private function downloadPicture():void{
file=new FileReference();
file.addEventListener(Event.COMPLETE,downloadComplete);
file.save(new JPEGEncoder(80).encode(getImg()),"default.jpg");
}
private function downloadComplete(event:Event):void{
Alert.show("成功保存图片到本地!","提示");
}
//保存图片到服务器即覆盖原来的图片
private function save():void{
Alert.show("是否保存剪切图片?","提示",3, this, function(event:CloseEvent):void {
if (event.detail==Alert.YES){
var request:URLRequest = new URLRequest("http://localhost:8080/cutPicuter/servlet/FileManagerSaveFileServlet?realPath="+encodeURIComponent(StringUtil.trim(realPath)));
request.method=URLRequestMethod.POST;
request.contentType = "application/octet-stream";
request.data = new JPEGEncoder(80).encode(getImg());
var loader:URLLoader = new URLLoader();
loader.load(request);
loader.addEventListener(Event.COMPLETE,saveResult);
}});
}
private function saveResult(event:Event):void{
Application.application.reLoadFolderFiles(realPath.substr(0,realPath.lastIndexOf("\\")));
Alert.show("保存剪切图片成功","提示");
}
]]>
</ mx:Script >
< mx:HBox x ="0" y ="0" >
< mx:LinkButton label ="剪裁" click ="doCapture();" icon ="@Embed('assets/cut.png')" />
< mx:LinkButton label ="预览" click ="doScan();" icon ="@Embed('assets/ok.png')" />
< mx:VRule height ="22" />
< mx:LinkButton label ="保存" click ="save()" icon ="@Embed('assets/save.png')" />
< mx:LinkButton label ="另存为" click ="downloadPicture();" icon ="@Embed('assets/saveAs.png')" />
</ mx:HBox >
< mx:Canvas id ="canvas" y ="23" x ="1" >
< local:ScaleBox id ="box" visible ="false" y ="0" x ="0" width ="100" height ="100" />
</ mx:Canvas >
</ mx:Application >
java代码:
package
com;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class FileManagerSaveFileServlet
*/
public class FileManagerSaveFileServlet extends HttpServlet {
private int len = 0 ; // 处理流
private int mm = 0 ; // 重命名
private String fileName = "" ; // 文件原名
private String extName = "" ; // 文件扩展名
private String tempFileName = "" ; // 文件名加扩展名
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
public void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding( " utf-8 " );
String realPath = request.getParameter( " realPath " );
// System.out.println("FMSFS-->realPath:"+realPath);
response.setContentType( " application/octet-stream " );
InputStream is = request.getInputStream();
try {
int size = 0 ;
byte [] tmp = new byte [ 100000 ];
tempFileName = realPath.substring(realPath.lastIndexOf( " \\ " ) + 1 ); // 切割获得文件名加扩展名
fileName = tempFileName.substring( 0 ,tempFileName.lastIndexOf( " . " )); // 切割获得文件名
// 确保获得真实的文件名如:1(1)可以获得真实为1,
if (fileName.indexOf( " ( " ) !=- 1 ){
fileName = fileName.substring( 0 ,fileName.indexOf( " ( " ));
}
extName = tempFileName.substring(tempFileName.lastIndexOf( " . " )); // 切割获得扩展名
// 调用递归方法
fileName += reNameFile(realPath.substring( 0 ,realPath.lastIndexOf( " \\ " ) + 1 ),fileName,extName);
// 创建一个文件夹用来保存发过来的图片;
File f = new File(realPath.substring( 0 ,realPath.lastIndexOf( " \\ " ) + 1 ) + fileName + extName);
DataOutputStream dos = new DataOutputStream( new FileOutputStream(f));
while ((len = is.read(tmp)) != - 1 ) {
dos.write(tmp, 0 , len);
size += len;
}
dos.flush();
dos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
// 递归来重命名文件名
String str = "" ;
public String reNameFile(String realPath,String filename,String extName){
File file = new File(realPath + " \\ " + filename + extName);
str = "" ;
if (file.exists()){
mm ++ ;
str = " _ " + mm;
reNameFile(realPath,fileName + str,extName);
} else {
if (mm != 0 ){
str = " _ " + mm;
}
}
return str;
}
}
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class FileManagerSaveFileServlet
*/
public class FileManagerSaveFileServlet extends HttpServlet {
private int len = 0 ; // 处理流
private int mm = 0 ; // 重命名
private String fileName = "" ; // 文件原名
private String extName = "" ; // 文件扩展名
private String tempFileName = "" ; // 文件名加扩展名
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
public void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding( " utf-8 " );
String realPath = request.getParameter( " realPath " );
// System.out.println("FMSFS-->realPath:"+realPath);
response.setContentType( " application/octet-stream " );
InputStream is = request.getInputStream();
try {
int size = 0 ;
byte [] tmp = new byte [ 100000 ];
tempFileName = realPath.substring(realPath.lastIndexOf( " \\ " ) + 1 ); // 切割获得文件名加扩展名
fileName = tempFileName.substring( 0 ,tempFileName.lastIndexOf( " . " )); // 切割获得文件名
// 确保获得真实的文件名如:1(1)可以获得真实为1,
if (fileName.indexOf( " ( " ) !=- 1 ){
fileName = fileName.substring( 0 ,fileName.indexOf( " ( " ));
}
extName = tempFileName.substring(tempFileName.lastIndexOf( " . " )); // 切割获得扩展名
// 调用递归方法
fileName += reNameFile(realPath.substring( 0 ,realPath.lastIndexOf( " \\ " ) + 1 ),fileName,extName);
// 创建一个文件夹用来保存发过来的图片;
File f = new File(realPath.substring( 0 ,realPath.lastIndexOf( " \\ " ) + 1 ) + fileName + extName);
DataOutputStream dos = new DataOutputStream( new FileOutputStream(f));
while ((len = is.read(tmp)) != - 1 ) {
dos.write(tmp, 0 , len);
size += len;
}
dos.flush();
dos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
// 递归来重命名文件名
String str = "" ;
public String reNameFile(String realPath,String filename,String extName){
File file = new File(realPath + " \\ " + filename + extName);
str = "" ;
if (file.exists()){
mm ++ ;
str = " _ " + mm;
reNameFile(realPath,fileName + str,extName);
} else {
if (mm != 0 ){
str = " _ " + mm;
}
}
return str;
}
}