`
edwin492
  • 浏览: 112898 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

关于图片的一些处理

阅读更多

一些图片处理:

 

//两张图片合成	
 public static void composePic(String filesrc,String logosrc,String outsrc,int x,int y) throws Exception {
		    try {
		        File bgfile = new File(filesrc);
		        Image bg_src = javax.imageio.ImageIO.read(bgfile);
		        
		        File logofile = new File(logosrc);
		        Image logo_src = javax.imageio.ImageIO.read(logofile);
		        
		        int bg_width = bg_src.getWidth(null);
		        int bg_height = bg_src.getHeight(null);
		        int logo_width = logo_src.getWidth(null);;
		        int logo_height = logo_src.getHeight(null);

		        BufferedImage tag = new BufferedImage(bg_width, bg_height, BufferedImage.TYPE_INT_RGB);
		        
		        Graphics2D g2d = tag.createGraphics();
		        g2d.drawImage(bg_src, 0, 0, bg_width, bg_height, null);
		        
		        g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,1.0f)); //透明度设置开始  
		        g2d.drawImage(logo_src,x,y,logo_width,logo_height, null);            
		        g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER)); //透明度设置 结束
		        
		        FileOutputStream out = new FileOutputStream(outsrc);
		        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
		        encoder.encode(tag);
		        out.close();
		    }catch (Exception e) {
		        e.printStackTrace();
		        log.info("图片合成失败:" + e.getMessage());
		        throw new Exception(e);
		    }
		  }
//生成指定大小的图片
	 public static void createImg(String path, int width, int height) throws Exception{
	     File file = new File(path);
	     BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);   
	        Graphics2D g2 = (Graphics2D)bi.getGraphics();   
	        g2.setBackground(Color.WHITE);   
	        g2.clearRect(0, 0, width, height);   
	        g2.setPaint(Color.RED);   
	        ImageIO.write(bi, "jpg", file);   
	 }

 //图片base64编码与解码

 

public class ImgConvert
{
    public static String getBase64(String path) throws Exception
    {//将图片文件转化为字节数组字符串,并对其进行Base64编码处理
        InputStream in = null;
        byte[] data = null;
        if(null == path || "".equals(path)) return "";
        //读取图片字节数组
        File file = new File(path);
        in = new FileInputStream(file);        
        data = new byte[in.available()];
        in.read(data);
        in.close();
        //对字节数组Base64编码
        BASE64Encoder encoder = new BASE64Encoder();
        return encoder.encode(data);//返回Base64编码过的字节数组字符串
    }
    
    public static boolean getImage(String imgStr, String path)
    {//对字节数组字符串进行Base64解码并生成图片
        if (imgStr == null) //图像数据为空
            return false;
        BASE64Decoder decoder = new BASE64Decoder();
        try 
        {
            //Base64解码
            byte[] b = decoder.decodeBuffer(imgStr);
            for(int i=0;i<b.length;++i)
            {
                if(b[i]<0)
                {//调整异常数据
                    b[i]+=256;
                }
            }
            //生成jpeg图片
            OutputStream out = new FileOutputStream(path);    
            out.write(b);
            out.flush();
            out.close();
            return true;
        } 
        catch (Exception e) 
        {
            return false;
        }
    }
}
 

 

//图片上添加文字 
public class ImgMessage {
	public static void main(String[] args) {
		String url = "D:\\Blue.jpg";
	}

	public String writeMessage(String message, String url, int offsetTop, int offsetLeft) {
		try {
			// 读取模板图片内容
			JPEGImageDecoder decoder = JPEGCodec
					.createJPEGDecoder(new FileInputStream(url)); // 读取图片路径
			BufferedImage image = decoder.decodeAsBufferedImage();
			Graphics2D g = image.createGraphics();// 得到图形上下文
			g.setColor(Color.BLACK); // 设置画笔颜色
			RenderingHints rh = new RenderingHints(
					RenderingHints.KEY_ANTIALIASING,
					RenderingHints.VALUE_ANTIALIAS_ON);
			rh.put(RenderingHints.KEY_STROKE_CONTROL,
					RenderingHints.VALUE_STROKE_PURE);
			rh.put(RenderingHints.KEY_ALPHA_INTERPOLATION,
					RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
			rh.put(RenderingHints.KEY_TEXT_ANTIALIASING,
					RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
			rh.put(RenderingHints.KEY_RENDERING,
					RenderingHints.VALUE_RENDER_QUALITY);
			g.setRenderingHints(rh);
			g.setColor(Color.black);
			Font font = new Font("宋体", Font.BOLD, 12);
			g.setFont(font);
			FontMetrics fm = g.getFontMetrics(font);

			// 设置换行操作
			int fontHeight = fm.getHeight();// 字符的高度
			int rowIndex = 1;
			int left = offsetLeft;
			for (int i = 0; i < message.length(); i++) {
				char c = message.charAt(i);
				int charWidth = fm.charWidth(c); // 字符的宽度
				// 另起一行
				if (Character.isISOControl(c)) {
					rowIndex++;
					left = offsetLeft;
				}
				g.drawString(String.valueOf(c), left, offsetTop + rowIndex
						* fontHeight); // 把一个个写到图片上
				left += charWidth; // 设置下字符的间距
			}
			g.dispose();
		
			String outFileName = url; // 图片要存储的路径
			FileOutputStream out = new FileOutputStream(outFileName);// 通过流操作把文字图片结合
			JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
			encoder.encode(image);
			out.close();
			return outFileName;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
}

 //图片裁剪

 

/**
     * 按前台截取的大小对原图进行截取
     * 
     * @param img
     *            原图文件
     * @param dest
     *            保存地址
     * @param top
     *            左上角点的Y
     * @param left
     *            左上角点的X
     * @param width
     *            图片的宽度
     * @param height
     *            图片的高度
     * @param type 
     *            图片类型
     * @return
     * @throws IOException
     */
    public static void resizeImage(File img, String dest, int top, int left,
            int width, int height, String type) throws Exception {
       try{
           File fileDest = new File(dest);
           BufferedImage bi = (BufferedImage) ImageIO.read(img);
           BufferedImage bi_cropper = bi.getSubimage(left, top, width, height);
           ImageIO.write(bi_cropper, type, fileDest);
       }catch(Exception e){
           e.printStackTrace();
           log.error("图片裁剪失败:" + e.getMessage());
           throw new Exception(e.getMessage());
       }
    }
    
    /**
     * 对gif图形进行裁剪
     * @param img
     * @param dest
     * @param top
     * @param left
     * @param width
     * @param height
     */
    public void resizeGifImage(File img, String dest, int top, int left, int width, int height){
        File des = new File(dest);
        GifImage gif;
        try {
            gif = GifDecoder.decode(img);
            Rectangle rect = new Rectangle(top, left, width, height-3);
            GifImage cropIMG = GifTransformer.crop(gif, rect);
            GifEncoder.encode(cropIMG, des);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

 jquery插件:

easydrag: 一个简单的拖放插件,可用于获取拖放div的id再获取位置(top,left),有需要可以通过iframe进行限制以获取准确的top,left。
jquery.form: 以ajax方式提交form表单。
jcarousel: 可横向和纵向的滚动显示图片。jcrop: 裁剪插件。
kindeditor:一个在线编辑插件,部分功能可单独使用,如取色器。

 java以积竖线分隔split("\\|");

js的replace替换所有逗号replace(/,/g, '_')应用正则,得去学习学习正则。
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics