Java实现头像截取裁剪后图片保存,获取的是base64数据,怎么转换为图片并保存到数据库。并读取出来。

Java实现头像拖拽截取裁剪后图片保存,获取的是base64数据,base64数据转换为图片后存入到数据库。并读取出来。

1.操作过程效果截图:

  • 点击编辑头像进入头像上传页面

这里写图片描述

  • 头像上传页面

这里写图片描述

  • 点击选择图片,选择需要上传的图片进行拖拽裁剪

这里写图片描述

  • 裁剪后的图片进行保存

这里写图片描述

  • 保存后的图片存入数据库,存入本地文件夹

这里写图片描述

这里写图片描述


2.需要的材料(html, js ,css),太多了我就不发出了,我这个也是下载那个然后自己修改的。下面是静态Demo页面的下载地址。

http://www.w2bc.com/article/194799

  • 百度头像裁剪截取拖拽也可以找到:

这里写图片描述

  • 下载后内容:

这里写图片描述


3.打开静态页面,对页面做简单的修改。

  • 添加一个textarea文本域用来存取base64数据。
<div id="text">
	<textarea rows="10" cols="100"></textarea>
</div>

这里写图片描述

  • js添加两行: alert()用来测试,textarea用来存取base64数据。
alert(cropper.getDataURL());
$('#text textarea').val(cropper.getDataURL());

这里写图片描述

  • 选择图片,测试:页面texteare已经获取。
    这里写图片描述

4.将Js,css,html 加入 Java Web里面。页面加入form 表单,点击保存时,把texteare的base64数据提交到controller控制器里面进行base64数据转为图片,并保存到数据库和本地。

  • jsp页面修改。

这里写图片描述

  • 建一个base64数据格式和图片相互转换的base64类。(重要)
package com.ssm.jock.utils;

import java.io.FileInputStream;
import java.io.FileOutputStream;  
import java.io.IOException;  
import java.io.InputStream;  
import java.io.OutputStream;  
  
import sun.misc.BASE64Decoder;  
import sun.misc.BASE64Encoder;  
  
public class Base64
{  
    //图片转化成base64字符串  
    public static String GetImageStr(String imageName)  
    {//将图片文件转化为字节数组字符串,并对其进行Base64编码处理  
        String imgFile = imageName;//待处理的图片  
        InputStream in = null;  
        byte[] data = null;  
        //读取图片字节数组  
        try   
        {  
            in = new FileInputStream(imgFile);          
            data = new byte[in.available()];  
            in.read(data);  
            in.close();  
        }   
        catch (IOException e)   
        {  
            e.printStackTrace();  
        }  
        //对字节数组Base64编码  
        BASE64Encoder encoder = new BASE64Encoder();  
        return encoder.encode(data);//返回Base64编码过的字节数组字符串  
    }  
      
    
    
    //base64字符串转化成图片  
    public static boolean GenerateImage(String imgStr,String imageName)  
    {   //对字节数组字符串进行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图片  
            String imgFilePath = imageName;//新生成的图片  
            OutputStream out = new FileOutputStream(imgFilePath);      
            out.write(b);  
            out.flush();  
            out.close();  
            return true;  
        }   
        catch (Exception e)   
        {  
            return false;  
        }  
    }  
}  
  • 控制器代码:
/**
 * 根据Id获取该用户的头像并删除
 * 获取base64数据的图片数据,转为图片格式存入指定文件夹里面
 * @param buyerMess 用户对象
 * @param text base64数据
 * @param request
 * @return
 * @throws Exception
 */
@RequestMapping("/updateUserMess")
public String updatePhotoUrl(
		BuyerMess buyerMess, 
		String text,
		Model model,
		HttpServletRequest request) throws Exception{
		//输出base64 数据,截取","之后的值进行转换
		String str = text.substring(text.indexOf(",")+1);
		//System.currentTimeMillis()意思是获取当前系统的时间戳给图片命名
		//实例化Base64转换类  调用里面的GenerateImage方法(把base64数据转为图片)
		//第一个参数base64转图片的必须的base64数据,第二个是转换后生成的图片存放路径
		Base64.GenerateImage(str, "D:/images/user_head/"+System.currentTimeMillis()+".jpg");
		//数据库存入绝对路径下的图片名称(上传图片即是修改操作)
		buyerMess.setPhotourl("D:/images/user_head/"+System.currentTimeMillis()+".jpg");
		buyerMess.setId("zhangsan");
		//根据用户Id修改头像图片存的路径
		Integer ret = buyerMessService.updatePhotoUrl(buyerMess);
		if(ret>0){
			System.out.println("存入成功");
		}else{
			System.out.println("存入失败");
		}
	//调用查询方法,返回到页面
	return "redirect:/first.htm";
}

4.为什么需要截取:因为获取的base64数据不能识别前面带“data:image/png;base64,”的。把这个截取后才能被识别,否则生成不了。

  • 设置断点,鼠标悬浮到text上面,可以看到下面的base64数据已经传入此方法里面了。

这里写图片描述

  • 对base64数据进行截取。(把“,”号之前的data:image/png;base64, 截取掉,只需要后面的数据才能转换)

这里写图片描述

5.总结:其实看上去很多,实际很简单。大致分为5步。

  • 把前台获取的base64数据传入后台。
  • 把获取的base64数据进行截取,只需要“,”逗号之后的数据才能转换。
  • 创建base64转换的类,用于把base64数据转为图片。
  • 调用base64数据转换为图片的方法,参数(base64数据,图片保存地址)。
  • 设置数据库的图片路径为图片保存路径。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Q_Q 忙里偷闲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值