base64图片编码上传,判断图片是否有旋转,若有旋转修正图片并保存至阿里云OSS...

功能:app应用图片上传

功能说明:app应用上传图片,服务端接口处理上传的图片并保存至阿里云OSS。据同事提出,由于用户手机系统不同,有部分情况下上传的照片会存在旋转角度,此时要判断并保存正常角度的图片。 

提示:相关方法可在本文末尾查找,如:encodeImgageToBase64() , uploadToAliYunOSS()。。。

方法一:若存储在本地服务器,利用 Thumbnails.jar     代码如下:

public static void main(String[] args) throws Exception {
		String path = "图片路径";
		File file = new File(path);
		String imgBase64 = encodeImgageToBase64(file);
		byte[] bytes = Base64.decodeBase64(imgBase64);
		InputStream input = new ByteArrayInputStream(bytes);
		BufferedImage old_img = ImageIO.read(input);  
		int w = old_img.getWidth();
		int h = old_img.getHeight();
        double angle = 90;//旋转角度,正数为顺时针旋转,负数逆时针旋转
		Thumbnails.of(old_img).size(w , h).rotate(angle).toFile(new File("保存目录" + System.currentTimeMillis() + ".jpg"));
	}

方法二:存储到阿里云OSS(注:uploadToAliYunOSS方法,末尾提供一个参考。详情见阿里云对象存储OSS_SDK手册_JAVA-SDK上传文件:https://help.aliyun.com/document_detail/32013.html?spm=5176.doc31986.6.288.BUSv4Z

坑一用方法一中的步骤,图片上传成功,新图高宽正常,但图片底色有变化,

原因:Thumbnails类的apply()方法中,BufferedImage的定义为:

BufferedImage newImage = new BufferedImageBuilder(newWidth, newHeight).build();

个人理解为:由于,图片是有base64编码而来,定义新图片时底色有所丢失,转而重新定义为(具体详见于末尾rotateImg()方法):

BufferedImage new_img = new BufferedImageBuilder(newWidth, newHeight , BufferedImage.TYPE_INT_BGR).build();

测试代码如下:

public static void main(String[] args) throws Exception {
		String path = "图片路径"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值