图片缩放与转换
来源:互联网 发布:linux搜狗输入法乱码 编辑:程序博客网 时间:2024/04/29 11:51
通过对图片重绘,达到图片缩放、压缩编码转换功能。
import java.awt.Image; import java.awt.image.BufferedImage; import java.awt.image.RenderedImage; import java.io.File; import java.io.InputStream; import java.io.OutputStream; import javax.imageio.ImageIO; /** * * @author 梁栋 * @version 1.0 * @since 1.0 */ public abstract class ImageUtils { /** * 缩放图片 * * @param width * 输出宽度 * @param height * 输出高度 * @param input * 输入流 * @param output * 输出流 * @param format * 输出格式 * @return * @throws Exception */ public static boolean convert(int width, int height, InputStream input, OutputStream output, String format) throws Exception { // 输入 BufferedImage inputImage = ImageIO.read(input); // 转换 RenderedImage im = (RenderedImage) convert(height, height, inputImage); // 输出 return ImageIO.write(im, format, output); } /** * 转换压缩算法 * * @param input * 输入文件 * @param output * 输出文件 * @return * @throws Exception */ public static boolean convert(File input, File output) throws Exception { // 输入 BufferedImage inputImage = ImageIO.read(input); // 转换 int width = inputImage.getWidth(); int height = inputImage.getHeight(); RenderedImage im = (RenderedImage) convert(width, height, inputImage); String outputFilename = output.getName(); String format = outputFilename.substring(outputFilename .lastIndexOf('.') + 1); // 输出 return ImageIO.write(im, format, output); } /** * 缩放图片 * * @param width * 输出宽度 * @param height * 输出高度 * @param input * 输入文件 * @param output * 输出文件 * @return * @throws Exception */ public static boolean convert(int width, int height, File input, File output) throws Exception { // 输入 BufferedImage inputImage = ImageIO.read(input); // 转换 RenderedImage im = (RenderedImage) convert(width, height, inputImage); String outputFilename = output.getName(); String format = outputFilename.substring(outputFilename .lastIndexOf('.') + 1); // 输出 return ImageIO.write(im, format, output); } /** * 缩放图片 * * @param width * 输出宽度 * @param height * 输出高度 * @param input * 输入路径 * @param output * 输出路径 * @return * @throws Exception */ public static boolean convert(int width, int height, String inputPath, String outputPath) throws Exception { return convert(width, height, new File(inputPath), new File(outputPath)); } /** * 转换 * * @param width * 输出宽度 * @param height * 输出高度 * @param input * BufferedImage * @return BufferedImage * @throws Exception */ private static BufferedImage convert(int width, int height, BufferedImage input) throws Exception { // 初始化输出图片 BufferedImage output = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 重新绘图 Image image = input.getScaledInstance(output.getWidth(), output .getHeight(), output.getType()); output.createGraphics().drawImage(image, null, null); return output; } /** * 等比缩放图片 * * @param width * 输出宽度 * @param height * 输出高度 * @param input * 输入流 * @param output * 输出流 * @return * @throws Exception */ public static boolean equimultipleConvert(int width, int height, String input, String output) throws Exception { return equimultipleConvert(width, height, new File(input), new File( output)); } /** * 等比缩放图片 * * @param width * 输出宽度 * @param height * 输出高度 * @param input * 输入流 * @param output * 输出流 * @return * * @throws Exception */ public static boolean equimultipleConvert(int width, int height, File input, File output) throws Exception { // 输入 BufferedImage image = ImageIO.read(input); // 重新核算尺寸 if (image.getWidth() > 0 && image.getHeight() > 0) { if ((image.getWidth() / image.getHeight()) >= (width / height)) { if (image.getWidth() > width) { height = (image.getHeight() * width) / image.getWidth(); } else { width = image.getWidth(); height = image.getHeight(); } } else { if (image.getHeight() > height) { width = (image.getWidth() * height) / image.getHeight(); } else { width = image.getWidth(); height = image.getHeight(); } } } // 转换 输出 return convert(width, height, input, output); } }
给出一个简单的测试类:
import org.junit.Test; /** * * @author 梁栋 * @version 1.0 * @since 1.0 */ public class ImageUtilsTest { /** * Test method for * {@link org.zlex.common.image.ImageUtils#main(java.lang.String[])}. */ @Test public void test() throws Exception { System.out.println(ImageUtils.convert(1650, 1024, "c:\\1.png", "c:\\1.png.jpg")); System.out.println(ImageUtils.convert(400, 300, "c:\\1.jpg", "c:\\1.jpg.jpg")); System.out.println(ImageUtils.convert(400, 300, "c:\\1.jpg", "c:\\1.jpg.png")); System.out.println(ImageUtils.convert(50, 50, "c:\\1.jpg", "c:\\1.jpg.gif")); System.out.println(ImageUtils.convert(40, 30, "c:\\1.bmp", "c:\\1.bmp.gif")); System.out.println(ImageUtils .convert(40, 30, "c:\\1.bmp", "c:\\1.jpeg")); System.out.println(ImageUtils.equimultipleConvert(1600, 1400, new File( "c:\\1.bmp"), new File("c:\\1Equimultiple.jpeg"))); } }
- 图片缩放与转换
- 图片缩放与转换
- 图片缩放与转换
- 图片缩放与转换
- 图片缩放转换类
- 图片截取与缩放
- 图片缩放与旋转
- 图片转换缩放工具类
- Android 图片缩放与旋转
- Android图片拉伸与缩放
- Flex 图片拖放与缩放
- android图片缩放与旋转
- 图片的缩放与旋转
- 图片处理 缩放与圆形
- 同时缩放文字与图片
- Android图片压缩与缩放,Bitmap和Drawable相互转换(转)
- java 图片切割,缩放,转换类型等等
- java 图片切割,缩放,转换类型等等
- JAVA learning Arrays
- 表达式前后缀表达形式 [zz]
- MVC之DataTableFor和Ajax链接
- weblogic NodeManager的 [Security:090482]BAD_CERTIFICATE alert 错误
- 开发笔记 那些年追过的图片(五):imageView GIF 动画
- 图片缩放与转换
- 学习Tomcat源码(1) http协议 web服务器原理
- 为 PHP 开发者准备的 12 个调试工具
- x264 代码重点详解 详细分析
- RMAN常用配置命令解释
- golang ODBC 访问access数据库
- 【转】Java中的OutOfMemoryError和JVM内存结构
- C/C++ 变量定义与声明的区别
- 在Linux下搭建RoR运行环境