Package com.sogou.qadev.service.cynthia.service

Source Code of com.sogou.qadev.service.cynthia.service.ImageManager

/**
*
*/
package com.sogou.qadev.service.cynthia.service;

import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.awt.image.CropImageFilter;
import java.awt.image.FilteredImageSource;
import java.awt.image.ImageFilter;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.imageio.ImageIO;

import sun.misc.BASE64Encoder;

import com.sogou.qadev.service.cynthia.bean.Attachment;
import com.sogou.qadev.service.cynthia.factory.DataAccessFactory;

/**
* @description:image processor
* @author:liming
* @mail:liming@sogou-inc.com
* @date:2014-5-6 上午9:48:29
* @version:v1.0
*/
public class ImageManager {

 
  /**
   * @description:cut the image from attachment file id,and update attachment
   * @date:2014-5-6 上午9:49:08
   * @version:v1.0
   * @param fileId:attachment id
   * @param x:cut from x
   * @param y
   * @param width:cut width
   * @param height
   * @return
   */
  public static boolean abscut(String fileId, int x, int y,int width, int height) {
    DataAccessSession das = DataAccessFactory.getInstance().getSysDas();
   
    Attachment attachment = das.queryAttachment(DataAccessFactory.getInstance().createUUID(fileId), true);
     
    if (attachment == null)
      return false;
   
        try {
            //读取源图像
            BufferedImage bi = ImageIO.read(new ByteArrayInputStream(attachment.getData()));
            byte[] outByte = abscut(bi, x, y, width, height);
            //更新文件data
            attachment.setData(outByte);
            return das.updateAttachment(attachment);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }finally{
        }
    }
 
  /**
   * @description:cut the image and return image data
   * @date:2014-5-6 上午9:53:58
   * @version:v1.0
   * @param bi
   * @param x
   * @param y
   * @param width
   * @param height
   * @return
   */
  public static byte[] abscut(BufferedImage bi, int x, int y,int width, int height) {
      byte[] outByte = null;
        try {
            Image img;
            ImageFilter cropFilter;
            int srcWidth = bi.getWidth(); // 源图宽度
            int srcHeight = bi.getHeight(); // 源图高度
            if (srcWidth >= width && srcHeight >= height) {
                BufferedImage tag;
                Image image = bi.getScaledInstance(srcWidth, srcHeight,Image.SCALE_DEFAULT);
                // 四个参数分别为图像起点坐标和宽高
                // 即: CropImageFilter(int x,int y,int width,int height)
               
                cropFilter = new CropImageFilter(x, y, width, height);
                img = Toolkit.getDefaultToolkit().createImage(new FilteredImageSource(image.getSource(), cropFilter));
                int type = BufferedImage.TYPE_INT_ARGB;
                tag = new BufferedImage(width, height,type);
                Graphics2D g = (Graphics2D)tag.getGraphics();
                   
                g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);
                g.drawImage(img, 0, 0, null); // 绘制剪切后的图
                g.dispose();
               
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                ImageIO.write(tag, "PNG", out);
                outByte = out.toByteArray();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
        }
        return outByte;
    }
 
 
  /**
   *  @description:convert the image file to base64 string
   * @date:2014-5-6 上午9:55:58
   * @version:v1.0
   * @param imgInputStream
   * @return
   */
    public static String getImageStr(InputStream imgInputStream) { 
        byte[] data = null
        // 读取图片字节数组 
        try
            data = new byte[imgInputStream.available()]
            imgInputStream.read(data)
            imgInputStream.close()
        } catch (IOException e) { 
            e.printStackTrace()
       
        // 对字节数组Base64编码 
        BASE64Encoder encoder = new BASE64Encoder()
        // 返回Base64编码过的字节数组字符串 
        return encoder.encode(data)
    }

}
TOP

Related Classes of com.sogou.qadev.service.cynthia.service.ImageManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.