压缩图片上传到阿里云OSS(此处是有损压缩,过两天写下无损压缩)

前言: 以往文章说了如何上传图片到OSS,这次因为需求,需要将图片进行压缩上传,提高上传速度.

1.我这里没有使用Thumbnails 来压缩图片,因为我发现如果是传入PNG图片,然后转成jpg的时候回出现图片变红,所以我放弃了这种做法,(但是都说这种效率高,)

2.我直接采用的是java自带的BufferedImage+ImageIO来完成压缩,什么都不说了,只上传压缩代码,如果有同学想获取完整版的上传图片到OSS并压缩的,那么结合我以前发的文章

3.参考网站:

图片变红如何解决? http://bbs.csdn.net/topics/392038869

PNG转成JPG背景颜色改变的问题! http://blog.csdn.net/xujie3/article/details/51848831

上传图片到OSS并压缩! (我使用他这种会变色) http://blog.csdn.net/a3215q/article/details/71126869

public String uploadImg2Oss(MultipartFile file) throws ImgException {
		if (file.getSize() > 10 * 1024 * 1024) {
			throw new ImgException("上传图片大小不能超过10M!");
		}
		String originalFilename = file.getOriginalFilename();
		String substring = originalFilename.substring(originalFilename.lastIndexOf(".")+1).toLowerCase();
		Random random = new Random();
		String name = random.nextInt(10000) + System.currentTimeMillis() +"."+substring;
		InputStream inputStream = file.getInputStream();
		try {
			// 把图片读入到内存中
			BufferedImage bufImg = ImageIO.read(inputStream);
			// 压缩代码
			// 存储图片文件byte数组
			ByteArrayOutputStream bos = new ByteArrayOutputStream();
			//防止图片变红
			BufferedImage newBufferedImage = new BufferedImage(bufImg.getWidth(), bufImg.getHeight(), 		BufferedImage.TYPE_INT_RGB);  
			newBufferedImage.createGraphics().drawImage(bufImg, 0, 0, Color.WHITE, null);
			//先转成jpg格式来压缩,然后在通过OSS来修改成源文件本来的后缀格式
	        ImageIO.write(newBufferedImage,"jpg",bos);
	        //获取输出流
			inputStream = new ByteArrayInputStream(bos.toByteArray());
			//上传OSS
			this.uploadFile2OSS(inputStream, name);
			return name;
		} catch (Exception e) {
			throw new ImgException("图片上传失败");
		} finally {
            inputStream.close();
        }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
阿里云OSS支持图片压缩功能,可以通过以下步骤实现图片上传压缩: 1. 安装阿里云OSS SDK,并引入相关依赖。 2. 创建OSSClient对象,指定Endpoint、AccessKeyId和AccessKeySecret。 3. 创建PutObjectRequest对象,指定需要上传的文件路径和存储路径,并设置Content-Type为image/jpeg。 4. 调用OSSClient的putObject方法上传文件到OSS。 5. 在存储路径后面添加参数,如“?x-oss-process=image/resize,m_fixed,w_100,h_100”,表示压缩图片,将图片宽度和高度限定为100。 以下是示例代码: ```java import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.model.PutObjectRequest; public class OSSUtil { // 阿里云OSS配置信息 private static final String endpoint = "oss-cn-hangzhou.aliyuncs.com"; private static final String accessKeyId = "yourAccessKeyId"; private static final String accessKeySecret = "yourAccessKeySecret"; private static final String bucketName = "yourBucketName"; // 上传文件到OSS public static void uploadFileToOSS(String filePath, String objectName) { // 创建OSSClient对象 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // 创建PutObjectRequest对象 PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new File(filePath)); putObjectRequest.setContentType("image/jpeg"); // 上传文件到OSS ossClient.putObject(putObjectRequest); // 关闭OSSClient ossClient.shutdown(); } } ``` 例如,上传名为test.jpg的图片到OSS,并压缩宽度和高度限定为100,可以使用以下代码: ```java String filePath = "D:/test.jpg"; String objectName = "test.jpg"; OSSUtil.uploadFileToOSS(filePath, objectName + "?x-oss-process=image/resize,m_fixed,w_100,h_100"); ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值