java操作图像水平翻转

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;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

终极之旅

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

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

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

打赏作者

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

抵扣说明:

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

余额充值