java的imageio
❶ java:image.ImageIO类的getRGB()方法,返回的是什么
java:image.ImageIO类的getRGB()方法返回的是一个整型数据。
这个方法可以从图片的指定区域读取ARGB像素值,并存储到rgbData数组中,rgbData中的数据是以0xAARRGGBB格式存储的,代表每个像素的颜色属性和透明属性。返回值就是RGB色彩。
RGB色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。
❷ 怎样使用java读取image
这是一个图片压缩代码,以前入职的时候照片必须得20k一下,所以我把100多k的照片压缩成了16k,你可以看一下
package com.atee.test;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
public class ImageShrink {
public static boolean compressPic(String srcFilePath, String descFilePath) throws IOException {
File file = null;
BufferedImage src = null;
FileOutputStream out = null;
ImageWriter imgWrier;
ImageWriteParam imgWriteParams;
// 指定写图片的方式为 jpg
imgWrier = ImageIO.getImageWritersByFormatName("jpg").next();
imgWriteParams = new javax.imageio.plugins.jpeg.JPEGImageWriteParam(
null);
// 要使用压缩,必须指定压缩方式为MODE_EXPLICIT
imgWriteParams.setCompressionMode(imgWriteParams.MODE_EXPLICIT);
// 这里指定压缩的程度,参数qality是取值0~1范围内,
imgWriteParams.setCompressionQuality((float) 0.7);
imgWriteParams.setProgressiveMode(imgWriteParams.MODE_DISABLED);
ColorModel colorModel =ImageIO.read(new File(srcFilePath)).getColorModel();// ColorModel.getRGBdefault();
// 指定压缩时使用的色彩模式
// imgWriteParams.setDestinationType(new javax.imageio.ImageTypeSpecifier(
// colorModel, colorModel.createCompatibleSampleModel(16, 16)));
imgWriteParams.setDestinationType(new javax.imageio.ImageTypeSpecifier(
colorModel, colorModel.createCompatibleSampleModel(16, 16)));
try {
if (isBlank(srcFilePath)) {
return false;
} else {
file = new File(srcFilePath);System.out.println(file.length());
src = ImageIO.read(file);
out = new FileOutputStream(descFilePath);
imgWrier.reset();
// 必须先指定 out值,才能调用write方法, ImageOutputStream可以通过任何
// OutputStream构造
imgWrier.setOutput(ImageIO.createImageOutputStream(out));
// 调用write方法,就可以向输入流写图片
imgWrier.write(null, new IIOImage(src, null, null),
imgWriteParams);
out.flush();
out.close();
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
public static boolean isBlank(String string) {
if (string == null || string.length() == 0 || string.trim().equals("")) {
return true;
}
return false;
}
public static void main(String[] args) throws IOException {
compressPic("C:\\358x441 - 111.jpg", "C:\\358x441 - 333.jpg");
}
}
❸ Java压缩图片ImageIO.read()报错
BufferedImage sourceImg =ImageIO.read(new FileInputStream(new File(toPath)));
或者
BufferedImage sourceImg =ImageIO.read(new File(toPath));
❹ java ImageIO是什么功能,详细说一下
它主要就是处理图片信息的。
知道一个类后,多看写他的API,会很有帮助的。
http://www.apihome.cn/api/java/ImageIO.html
❺ java imageio写入数据后生成的文件为什么会比实际写入的大
你把摄像机拍摄的图片的一部分数据(二进制数据)用两种方式存到硬盘的文件上.
方式一,把这些二进制数据编码成jpg图片,并保存,这里会加入一些"元数据",所以会比你想象中的大.
方式二,直接把二进制数据流写到硬盘上文件中,没有加入"元数据"所以数据大小没发生变化.
你可以想象一下方式一类似在MS Word文档中只存一个字母a,方式二类似在记事本中只存一个字母a,然后你比较这两个文件的大小.
❻ imageio java最大能读取多大尺寸的图片
BufferedImage image = javax.imageio.ImageIO.read(file);报错:java.lang.OutOfMemoryError
: Java heap space
图片大小是3425px*4843px,我本机内存1g。
------解决方案--------------------------------------------------------
Xms Xmx 把jvm的heap 调大点 试试~~~
------解决方案--------------------------------------------------------
设置一下stack size的大小 java 后跟参数即可设置,具体参数如下:
-Xms size set initial Java heap size
-Xmx size set maximum Java heap size
-Xss size set java thread stack size
------解决方案--------------------------------------------------------
用java.exe -Xmx1024m -Xms256m .来运行的程序,你机器是1G但是又没分配给jvm
------解决方案--------------------------------------------------------
ImageIO.read(File file)使用来自boolean getUseCache() 和 File getCacheDirectory()的当前缓存设置控制所创建的 ImageInputStream 中的缓存。其中getUseCache()默认设定是true,getCacheDirectory()返回的是setCacheDirectory(File cacheDirectory)所设定的目标,如果用户没有明显设定,那么getCacheDirectory()返回的将是null。
❼ Java/J2SE中的ImageIO影响了绘制速度,怎么解决
使用
ImageIcon img=new ImageIcon("图片地址");
Image m=img.getImage();
速度会快一些。
另外使用媒体加载器MediaTracker类,将需要的图片对象全部加载进来再操作,会提高速度。原理是把所有图像加载到内存中再读取,而不是从外存磁盘加载,读取。
❽ java imageIO 读取图片问题
试了一下,这张jpg图片中含有大量的元数据(注解数据),结构复杂,导致java读取错误。
可用画图等图片编辑软件“另存为”或者“导出”一下,同时去掉元数据。
就可以被ImageIO读取
❾ Java的imageIO读取图片后,怎么把他显示在panel上呢
您好:读取bmp文件到BufferedImage中
File file2 = new File("c:\\testimages\\tttt" + ".bmp");
// BufferedImage bi = backstore.getBufferedImage();
try {
output = ImageIO.read(file2);
} catch (IOException e) {
e.printStackTrace();
}
输出bmp文件
File file2 = new File("c:\\testimages\\tttt" + ".bmp");
ImageIO.write(bi, "bmp", file2);
Byte[]输出到文件
byte[] buf =UtilZip.zipObjectToByte(cache);
File file2 = new File("c:\\testimages\\cache.bin");
FileOutputStream fos =new FileOutputStream(file2);
fos.write(buf);
fos.flush();
fos.close();
读文件到Byte[]中
File file2 = new File("c:\\testimages\\cache.bin");
FileInputStream fis = new FileInputStream(file2);
byte[] buf = new byte[(int) file2.length()];
fis.read(buf);
fis.close();
填充颜色到整个画布
BufferedImage bi = backstore.getBufferedImage();
Graphics g2 = bi.getGraphics();
g2.setColor(Color.red);
g2.fillRect(0, 0, Common.width,
Common.height);
图像变灰操作
public finalBufferedImage getGrayPicture(BufferedImage originalPic) {
int imageWidth = originalPic.getWidth();
int imageHeight = originalPic.getHeight();
BufferedImage newPic = new BufferedImage(imageWidth, imageHeight,
BufferedImage.TYPE_3BYTE_BGR);
ColorConvertOp cco = new ColorConvertOp(ColorSpace
.getInstance(ColorSpace.CS_GRAY), null);
cco.filter(originalPic, newPic);
return newPic;
}
ImageIO
javax.imageio.ImageIO lets you save and restore Images to disk in a platform independent format. It works using plug-in moles that handle various formats including "gif", "png" and "jpeg" (all lower case, or all upper case, but not mixed). "jpeg" or "jpg" is acceptable. Use ImageIO. getWriterFormatNames() to find out which types are supported on your platform:
import javax.imageio.ImageIO;
public class Jai
{
public static void main ( String[] args )
{
String[] names = ImageIO.getWriterFormatNames();
for ( String name: names )
{
System.out.println( name );
}
}
}
Loading an Image from raw bytes
Here raw bytes represent the image of a *.gif, *.png or
// raw bytes to BufferedImage
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import javax.imageio.ImageIO;
...
BufferedImage image = ImageIO.read ( new ByteArrayInputStream ( rawImageBytes ) );
Saving an Image to raw bytes
// BufferedImage to raw bytes
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
...
// O P E N
ByteArrayOutputStream baos = new ByteArrayOutputStream( 1000 );
// W R I T E
ImageIO.write( aBufferedImage, "jpeg" ,
baos );
// C L O S E
baos.flush();
byte[] resultImageAsRawBytes = baos.toByteArray();
baos.close();
Loading a BufferedImage from a file
// file to BufferedImage
import java.awt.image. BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
...
BufferedImage image = ImageIO.read( new File( "rabbit.jpg" ) );
Saving a BufferedImage to a file
// BufferedImage to File
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
...
ImageIO.write( aBufferedImage, "jpeg" ,
new File ( "snap.jpg" ) );
ImageWriteParam is a way of controlling exactly how the image in encoded. There is currently no PNG support for it. This is not for injecting meta info.
Loading a BufferedImage from an URL
// url to BufferedImage
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
...
BufferedImage image = null;
try
{
image = ImageIO.read( url );
}
catch ( IOException e )
{
System.out.println( "image missing" );
}
Converting Image to BufferedImage
// Image to BufferedImage
import java.awt.image.BufferedImage;
import java.awt.Image;
...
BufferedImage bufferedImage = new BufferedImage ( imageWidth,
imageHeight,
BufferedImage.TYPE_INT_BGR );
bufferedImage.createGraphics().drawImage( image, 0, 0, this );
❿ java imageio.read error reading png image data怎么处理
我想问问有没方法可以让这样图片正常的读取? 其实我要实现的功能很简单就系对原图进行裁切处理得到一张处理过后的图片,以下是我的代码(没有带裁切不部分,因为报错是以为文件解析读取的问题而导致的):
package imgIOTest;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Test23 {
public static void main(String[] args) {