tif图片压缩
tif图片在ImageIo.read获取时,返回为空,导致无法使用,百度了很久,很多人说jai可以,便去看了下,总结如下:
public static void CompressPic(String srcPath, long maxSize) throws Exception {
		double cutPercent = 0.1;
		File file = new File(srcPath);
		//读取tif图
		SeekableStream s = new FileSeekableStream(srcPath);
		TIFFDecodeParam tifParam = new TIFFDecodeParam();
		ImageDecoder dec = ImageCodec.createImageDecoder("TIFF", s, tifParam);
		RenderedImage renderedImage = dec.decodeAsRenderedImage(); // 图片解码
		//转为bufferedImage对象
		BufferedImage bufferedImage = ImageUtil.convertRenderedImage(renderedImage);
		int width = bufferedImage.getWidth(null);
		int height = bufferedImage.getHeight(null);
		long fileLength = file.length();
		while ((fileLength / 1024) >= maxSize) {
			width = (int) (width * (1 - cutPercent));
			height = (int) (height * (1 - cutPercent));
			BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
			tag.getGraphics().drawImage(bufferedImage, 0, 0, width, height, null); // 绘制缩小后的图
			FileOutputStream deskImage = new FileOutputStream(srcPath); // 输出到文件流
			JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(deskImage);
			encoder.encode(tag); // 近JPEG编码
			deskImage.close();
File file1 = new File(srcPath);
			BufferedImage bufferedImage1 = ImageIO.read(new FileInputStream(file1));
			width = bufferedImage1.getWidth(null);
			height = bufferedImage1.getHeight(null);
			fileLength = file1.length();
		}
	}
===============================
这是tif的renderedImage对象转为Image对象的方法
public class ImageUtil {
@SuppressWarnings({ "unchecked", "rawtypes" })
	public static BufferedImage convertRenderedImage(RenderedImage img) {
		if (img instanceof BufferedImage) {
			return (BufferedImage) img;
		}
		ColorModel cm = img.getColorModel();
		int width = img.getWidth();
		int height = img.getHeight();
		WritableRaster raster = cm.createCompatibleWritableRaster(width, height);
		boolean isAlphaPremultiplied = cm.isAlphaPremultiplied();
		Hashtable properties = new Hashtable();
		String[] keys = img.getPropertyNames();
		if (keys != null) {
			for (int i = 0; i < keys.length; i++) {
				properties.put(keys[i], img.getProperty(keys[i]));
			}
		}
		BufferedImage result = new BufferedImage(cm, raster, isAlphaPremultiplied, properties);
		img.copyData(raster);
		return result;
	}
}
希望未来的自己更加努力!
tif图片压缩的更多相关文章
- 石火电光追风逐日|前端优化之次时代图片压缩格式WebP的项目级躬身实践(Python3 PIL+Nginx)
		
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_190 我们知道,在前端界有一个共识:速度就是生命,带宽就是金钱.怎样将页面加载速度有效提升是无数前端工程师无时不刻在思考的课题,目 ...
 - Golang 编写的图片压缩程序,质量、尺寸压缩,批量、单张压缩
		
目录: 前序 效果图 简介 全部代码 前序: 接触 golang 不久,一直是边学边做,边总结,深深感到这门语言的魅力,等下要跟大家分享是最近项目 服务端 用到的图片压缩程序,我单独分离了出来,做成了 ...
 - 三款不错的图片压缩上传插件(webuploader+localResizeIMG4+LUploader)
		
涉及到网页图片的交互,少不了图片的压缩上传,相关的插件有很多,相信大家都有用过,这里我就推荐三款,至于好处就仁者见仁喽: 1.名气最高的WebUploader,由Baidu FEX 团队开发,以H5为 ...
 - 前端构建工具之gulp(一)「图片压缩」
		
前端构建工具之gulp(一)「图片压缩」 已经很久没有写过博客了,现下终于事情少了,开始写博吧 今天网站要做一些优化:图片压缩,资源合并等 以前一直使用百度的FIS工具,但是FIS还没有提供图片压缩的 ...
 - gulp图片压缩
		
gulp图片压缩 网页性能优化,通常要处理图片,尤其图片量大的时候,更需要工具来批量处理,这里使用gulp,做个简单总结 image-resize压缩尺寸 var gulp = require('gu ...
 - Android  图片压缩、照片选择、裁剪,上传、一整套图片解决方案
		
1.Android一整套图片解决方案 http://mp.weixin.qq.com/s?__biz=MzAxMTI4MTkwNQ==&mid=2650820998&idx=1& ...
 - Java中图片压缩处理
		
原文http://cuisuqiang.iteye.com/blog/2045855 整理文档,搜刮出一个Java做图片压缩的代码,稍微整理精简一下做下分享. 首先,要压缩的图片格式不能说动态图片,你 ...
 - android 图片压缩
		
引用:http://104zz.iteye.com/blog/1694762 第一:我们先看下质量压缩方法: private Bitmap compressImage(Bitmap image) { ...
 - HTML5 CANVAS 实现图片压缩和裁切
		
原文地址:http://leonshi.com/2015/10/31/html5-canvas-image-compress-crop/?utm_source=tuicool&utm_medi ...
 
随机推荐
- CodeForces - 402B Trees in a Row (暴力)
			
题意:给定n个数,要求修改其中最少的数,使得这n个数满足ai + 1 - ai = k. 分析: 暴力,1000*1000. 1.这n个数,就是一个首项为a1,公差为k的等差数列.k已知,如果确定了a ...
 - 每天一点点之laravel框架 - Laravel5.6 + Passport实现Api接口认证
			
1.首先通过 Composer 包管理器安装 Passport: composer require laravel/passport 注:如果安装过程中提示需要更高版本的 Laravel:larave ...
 - 菜鸟理解Lamdba表达式
			
简单的说就是Java 1.8后给出个简化代码的方式, Java面向对象过分强调必须通过对象的形式来完成任务,而函数思想则尽量忽略面向对象的复杂语法,强调做什么,而不是以什么形式做. 举个栗子! 首先创 ...
 - C#应用程序结构
			
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...
 - APP中H5页面调试神器
			
Fiddler Web Debugging Tool for Free by Telerik window 可以 下载,然后我的H5 嵌入到 APP 里面就可以快速捕捉到接口啦.不会因为看不见就得靠“ ...
 - 每天一点点之laravel框架开发 - passport授权报invalid_credentials
			
{"error":"invalid_credentials","message":"The user credentials we ...
 - 为什么ApplePay在中国一直火不起来?
			
今年7月,易观发布<中国第三方移动支付市场2018年第1季度监测报告>.报告显示,2018年第一季度支付宝以53.76%的市场份额占据移动支付头把交椅,腾讯金融(微信支付)则以38.95% ...
 - Ubuntu 不插优盘无法启动
			
ubuntu安装成功后只能通过优盘启动 不插优盘就无法启动 启动后拔掉优盘没问题 难道动过优盘安装的 2013-06-16 20:01 提问者悬赏:5分 | 理电池 | 分类:电脑外接设备 | 浏览2 ...
 - 怎么调出原生态launcher
			
adb shell am start -n com.android.launcher3/.Launcher
 - Python—异步任务队列Celery简单使用
			
一.Celery简介 Celery是一个简单,灵活,可靠的分布式系统,用于处理大量消息,同时为操作提供维护此类系统所需的工具.它是一个任务队列,专注于实时处理,同时还支持任务调度. 中间人boker: ...