1、前端Ajax传值
$.ajax({
url : "${ctx}/XXX/transImg",
type : "POST",
data : {
'img' : "Base64字符串"
},
async : false,
cache : false,
timeout : 30000,
success : function(data) {
var html = '<img src="https://img-blog.csdnimg.cn/2022010711080592133.png'+data+ '" style="width:700px;"/>';
$("#photo").append(html);
},
error : function(data) {
alert("遇到了一些错误。");
}
});
2、后端处理
// 水平翻转
@ResponseBody
@RequestMapping(value = "transImg")
public String transImg(Model model, HttpServletRequest request) {
//前端传来的base64编码的图片
String base64String = request.getParameter("img");
BufferedImage hbi=null;
try {
//转成byte[]格式
byte[] src1 = Base64.decodeBase64(base64String.getBytes("UTF-8"));
ByteArrayInputStream inputStream = new ByteArrayInputStream(src1);
BufferedImage bi = ImageIO.read(inputStream);
hbi = rotateHorizon(bi);//调用水平翻转方法
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();//io流
try {
ImageIO.write(hbi, "png", baos);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//写入流中
byte[] bytes = baos.toByteArray();//转换成字节
BASE64Encoder encoder = new BASE64Encoder();
String png_base64 = encoder.encodeBuffer(bytes).trim();//再转换成base64串
png_base64 = png_base64.replaceAll("\n", "").replaceAll("\r", "");//删除 \r\n
System.out.println(png_base64);
return png_base64;//传回前端
}
/**
* 水平翻转图像
*/
public static BufferedImage rotateHorizon(BufferedImage bi) {
int width = bi.getWidth();
int height = bi.getHeight();
BufferedImage bufferedImage = new BufferedImage(width, height,
bi.getType());
for (int i = 0; i < width; i++)
for (int j = 0; j < height; j++)
bufferedImage.setRGB(width - i - 1, j, bi.getRGB(i, j));
return bufferedImage;
}
至此,图像翻转完并以base64编码传回前端进行显示。
扩展(参考:https://blog.youkuaiyun.com/z69183787/article/details/77337121)
/**
* 旋转图片为指定角度
*
* @param bufferedimage
* 目标图像
* @param degree
* 旋转角度
* @return
*/
public static BufferedImage rotateImage(final BufferedImage bufferedimage,
final int degree) {
int w = bufferedimage.getWidth();
int h = bufferedimage.getHeight();
int type = bufferedimage.getColorModel().getTransparency();
BufferedImage img;
Graphics2D graphics2d;
(graphics2d = (img = new BufferedImage(w, h, type))
.createGraphics()).setRenderingHint(
RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2d.rotate(Math.toRadians(degree), w / 2, h / 2);
graphics2d.drawImage(bufferedimage, 0, 0, null);
graphics2d.dispose();
return img;
}
/**
* 变更图像为指定大小
*
* @param bufferedimage
* 目标图像
* @param w
* 宽
* @param h
* 高
* @return
*/
public static BufferedImage resizeImage(final BufferedImage bufferedimage,
final int w, final int h) {
int type = bufferedimage.getColorModel().getTransparency();
BufferedImage img;
Graphics2D graphics2d;
(graphics2d = (img = createImage(w, h, type))
.createGraphics()).setRenderingHint(
RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2d.drawImage(bufferedimage, 0, 0, w, h, 0, 0, bufferedimage
.getWidth(), bufferedimage.getHeight(), null);
graphics2d.dispose();
return img;
}