import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.MemoryCacheImageInputStream;
/**
* 图片工具类,使用iio,需要优化!
* @author zuoge85
*
*/
public final class ImageUtils {
public static final String PNG="png";
public static final String JPG="jpeg";
public static final String BMP="bmp";
public static final String GIF="gif";
public static byte[] readFromFile(String path) throws IOException {
InputStream is = new FileInputStream(new File(path));
byte[] buf = new byte[is.available()];
is.read(buf);
is.close();
return buf;
}
/**
* 构建一个image对象
*
* @param img
* @return
* @throws IOException
*/
public static ImageInfo getImageInfo(byte[] img) throws IOException {
ByteArrayInputStream bais = new ByteArrayInputStream(img);
MemoryCacheImageInputStream is=new MemoryCacheImageInputStream(bais);
Iterator<ImageReader> it=ImageIO.getImageReaders(is);
ImageReader r=null;
while(it.hasNext()){
r=it.next();
break;
}
if(r==null){
return null;
}
ImageInfo i=new ImageInfo();
i.setType(r.getFormatName().toLowerCase());
int index=r.getMinIndex();
/**
* 对于ImageReader的线程安全是不确定的
*/
synchronized (r) {
r.setInput(is);
i.setHeight(r.getHeight(index));
i.setWidth(r.getWidth(index));
}
return i;
}
public static BufferedImage getImage(byte[] img) throws IOException {
ByteArrayInputStream bais = new ByteArrayInputStream(img);
BufferedImage src = ImageIO.read(bais);
return src;
}
/**
* 等比例缩放
* @param img
* @param width
* @return
* @throws IOException
*/
public static BufferedImage getScaleImage(byte[] img,String type,int width) throws IOException {
ByteArrayInputStream bais = new ByteArrayInputStream(img);
BufferedImage src = ImageIO.read(bais);
int w=src.getWidth();
int h=src.getHeight();
int height=(int) (((float)width/w)*h);
Image im=src.getScaledInstance(width, height,Image.SCALE_SMOOTH);
BufferedImage bi=new BufferedImage(width, height, src.getType());
bi.getGraphics().drawImage(im, 0, 0,null);
return bi;
}
public static byte[] getScaleImageBytes(byte[] img,String type,int width) throws IOException {
BufferedImage bi=getScaleImage(img, type, width);
ByteArrayOutputStream out=new ByteArrayOutputStream();
ImageIO.write(bi, type, out);
return out.toByteArray();
}
/**
* 获取文件类型,没找到返回null,这方法太高效了,可能不准确,
* 这个是我看的网上的,有bug不准确
* @param byte1
* @return
*/
public static String fastParseFileType(byte[] byte1) {
if ((byte1[0] == 71) && (byte1[1] == 73) && (byte1[2] == 70)
&& (byte1[3] == 56) && ((byte1[4] == 55) || (byte1[4] == 57))
&& (byte1[5] == 97)) {
return GIF;
}
if ((byte1[6] == 74) && (byte1[7] == 70) && (byte1[8] == 73)
&& (byte1[9] == 70)) {
return JPG;
}
if ((byte1[0] == 66) && (byte1[1] == 77)) {
return BMP;
}
if ((byte1[1] == 80) && (byte1[2] == 78) && (byte1[3] == 71)) {
return PNG;
}
return null;
};
public static class ImageInfo{
private String type;
private int width;
private int height;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public int getWidth() {
return width;
}
public void setWidth(int width) {
this.width = width;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
}
}
分享到:
相关推荐
通过使用Java语言和javacv库,我们可以快速获取视频文件中的帧图片,并对其进行等比缩放,以满足不同的应用需求。 知识点一:视频文件中的帧图片获取 * 视频文件中的帧图片获取是指从视频文件中抽取出每一帧图片的...
以上就是使用Java AWT进行图片缩放的基本步骤。在实际应用中,可能还需要考虑性能优化、异常处理以及支持不同格式的图片文件等细节。通过调整缩放算法和质量参数,我们可以获得更高质量的缩放结果。学习和掌握这些...
在压缩包中的"java图片大小转换"文件中,很可能包含了实现这些功能的示例代码和使用说明,可以参考学习以加深理解。在实际开发中,我们还可以借助第三方库如`ImageMagick`、`Java Advanced Imaging (JAI)`或`JavaFX`...
在Java编程语言中,处理图像是一项常见的任务,其中包括图片的缩放和拉伸。本文将深入探讨如何使用Java实现这一功能,特别是在实际项目中的应用。标题"java 图片的缩放与拉伸"直指核心问题,即如何改变图片的尺寸以...
总结来说,Java图片上传、预览和缩放涉及的主要知识点包括:Servlet处理文件上传、HTML5 File API、Java 2D API、图像处理库(如Apache Commons Imaging或JAI)、文件安全性和性能优化。理解并熟练掌握这些概念,...
7. **配置参数**:在`PictureResize.java`程序中,很可能包含了配置图片缩放大小的参数,这样用户可以根据需求调整缩放比例。 总之,批量缩放图片的Java实现是一个结合了文件操作、图像处理和可能的并发编程的技术...
以上就是Java中实现图片缩放和截剪的基本原理和代码实现。在实际应用中,可能需要考虑更多细节,比如图像的格式转换、质量控制、异常处理等。通过理解这些基础知识,你可以根据具体需求来定制自己的图像处理工具。在...
以下是一个简单的图片缩放方法: ```java public BufferedImage scaleImage(BufferedImage source, int targetWidth, int targetHeight) { double scaleWidth = (double) targetWidth / source.getWidth(); ...
Java图片浏览管理系统是一款基于Java开发的简易应用,旨在帮助用户方便地查看和管理他们的图片集合。这个系统可能包含了文件浏览器组件、图片预览功能、以及一些基本的图片操作选项,如旋转、缩放等。下面将详细介绍...
本文将深入探讨如何在Android中实现ImageView的图片缩放功能,同时结合异步加载和Activity的半透明效果,提升用户体验。 首先,我们要理解Android中ImageView的基本用法。ImageView可以设置为固定大小或根据图片...
在Java编程环境中,实现“拍照”和“截取图片”的功能涉及到多个技术层面,包括Web应用、设备访问、图像处理等。以下将详细介绍这些知识点: 1. **Java Web 应用**: Java Web应用程序是基于Java技术构建的,可以...
Java 中 ImageReader 和 BufferedImage 获取图片尺寸实例 Java 中获取图片尺寸有多种方法,其中使用 ImageReader 和 BufferedImage 是两种常见的方法。本文将对这两种方法进行详细介绍,并提供相应的代码实现。 ...
本篇文章将详细讲解如何在Java Swing中读取和显示图片,以及与之相关的知识点。 首先,我们需要了解Java中的图像处理类。`java.awt.Image`类是表示图像的基本类,它提供了加载、显示和操作图像的方法。而`javax....
在Java编程中,处理图像是一项常见的任务,包括调整图片大小、改变颜色效果以及添加特殊样式,如圆角和透明效果。本篇文章将深入探讨如何在Java中实现这些功能,特别是针对PNG格式的图片,因为PNG格式支持透明度,但...
在Android开发中,自定义控件是提升应用用户体验和满足...以上就是关于自定义ImageView图片缩放的核心知识点,希望对你的开发工作有所帮助。在实践中不断优化和调整,你将能构建出更加高效和用户友好的图片显示组件。
通过JavaScript来动态调整图片大小,例如,可以获取图片的真实宽度和高度,然后根据屏幕尺寸进行缩放: ```javascript var img = document.querySelector('img'); img.onload = function() { var maxWidth = ...
总结起来,Java图片缩放实现图片填充整个屏幕的核心在于动态计算缩放比例并利用`Matrix`进行缩放处理。这种方式在实际开发中非常实用,尤其在处理背景图或需要全屏展示的图片时,可以提供更好的视觉效果。理解并掌握...
在Java中,可以使用BufferedImage的getSubimage()方法获取图片的一部分,然后用这个子图创建新的BufferedImage。例如,定义裁剪区域的左上角坐标(x, y)和裁剪的宽度和高度,然后调用`bufferedImage.getSubimage(x, y...
Java图片编辑工具是一款基于Java开发的图像处理软件,它的设计目标是方便地集成到其他Java项目中,提供灵活的图片编辑功能。这个工具利用了Java的强大功能和跨平台特性,使得开发者可以在各种操作系统上实现图像的...