导航:首页 > 文件处理 > bufferedimage取消压缩

bufferedimage取消压缩

发布时间:2022-04-30 17:42:53

java:Image和BufferedImage的区别是什么

Image是一个抽象类,BufferedImage是Image的实现类。
Image和BufferedImage的主要作用就是将一副图片加载到内存中。
BufferedImage 子类描述具有可访问图像数据缓冲区的 Image。BufferedImage 由图像数据的 ColorModel 和 Raster 组成。Raster 的 SampleModel 中 band 的数量和类型必须与 ColorModel 所要求的数量和类型相匹配,以表示其颜色和 alpha 分量。所有 BufferedImage 对象的左上角坐标都为 (0, 0)。因此,用来构造 BufferedImage 的任何 Raster 都必须满足:minX=0 且 minY=0。

Java将一副图片加载到内存中的方法是:

String imgPath = "D://demo.bmp";
BufferedImage image = ImageIO.read(new FileInputStream(imgPath));

该方法BufferedImage 可以获得图片的详细信息,例如:获得图片的宽度:image.getWidth(null);图片只有加载内存中才能对图片进行进一步的处理。

Ⅱ java上传图片 生成缩略图,如果上传的图片尺寸比较小就压缩处理

//将图按比例缩小。
public static BufferedImage resize(BufferedImage source, int targetW, int targetH) {
// targetW,targetH分别表示目标长和宽
int type = source.getType();
BufferedImage target = null;
double sx = (double) targetW / source.getWidth();
double sy = (double) targetH / source.getHeight();
//这里想实现在targetW,targetH范围内实现等比缩放。如果不需要等比缩放
//则将下面的if else语句注释即可
if(sx>sy)
{
sx = sy;
targetW = (int)(sx * source.getWidth());
}else{
sy = sx;
targetH = (int)(sy * source.getHeight());
}
if (type == BufferedImage.TYPE_CUSTOM) { //handmade
ColorModel cm = source.getColorModel();
WritableRaster raster = cm.(targetW, targetH);
boolean alphaPremultiplied = cm.isAlphaPremultiplied();
target = new BufferedImage(cm, raster, alphaPremultiplied, null);
} else
target = new BufferedImage(targetW, targetH, type);
Graphics2D g = target.createGraphics();
//smoother than exlax:
g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY );
g.drawRenderedImage(source, AffineTransform.getScaleInstance(sx, sy));
g.dispose();
return target;
}

public static void saveImageAsJpg (String fromFileStr,String saveToFileStr,int width,int hight)
throws Exception {
BufferedImage srcImage;
// String ex = fromFileStr.substring(fromFileStr.indexOf("."),fromFileStr.length());
String imgType = "JPEG";
if (fromFileStr.toLowerCase().endsWith(".png")) {
imgType = "PNG";
}
// System.out.println(ex);
File saveFile=new File(saveToFileStr);
File fromFile=new File(fromFileStr);
srcImage = ImageIO.read(fromFile);
if(width > 0 || hight > 0)
{
srcImage = resize(srcImage, width, hight);
}
ImageIO.write(srcImage, imgType, saveFile);

}

public static void main (String argv[]) {
try{
//参数1(from),参数2(to),参数3(宽),参数4(高)
saveImageAsJpg("C:\\Documents and Settings\\xugang\\桌面\\tmr-06.jpg",
"C:\\Documents and Settings\\xugang\\桌面\\2.jpg",
120,120);
} catch(Exception e){
e.printStackTrace();
}

}

Ⅲ 如何消亡java的bufferedimage对象

java 中对象的回收不像C++要手动回收。系统会根据当前内存的消耗情况自动调用,垃圾回器回收。具体回收哪些,不受程序控制。不过一般会回收一些没有引用指向的内存。就是那这个对象的引用值为null。前提和这个对象一样引用同一块内存的引用都值为null.系统发现这块内存地址没用了,就会回收。你可以手动调用gc回收,但是不能控制回收哪些。你这个对象用完后值为null就行。

Ⅳ java 中关于BufferedImage的使用

gr.drawImage(bufferedImage,j*30,i*30,30,30,Color.WHITE,null);
null这个参数不对吧,好象是当前窗口的对象.

Ⅳ 我用BufferedImage方法读入了一张图片,现在我想将这张图片改变成640*380的大小再使用,该怎么办

可以用 java.awt.geom.AffineTransform , 具体方法如下.
(width是新的长度,height是新的高度,image是改变大小之后的图片,source是原本从文件中读入的图片)

int width = 640;
int height = 380;
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
AffineTransform at = AffineTransform.getScaleInstance(
(double) width / source.getWidth(),
(double) height / source.getHeight());
g.drawRenderedImage(source, at);

Ⅵ java BufferedImage 内存无法回收是怎么回事

因为你是在同一个方法中 sleep ,如果程序中有使用内存大的语句,在使用完成后,需要手工将内存释放,

BufferedImage b1 = new ....

使用完后:

b1 = null

这样,JVM 就会知道 b1 的内存可以回收了。

Ⅶ java直接压缩bufferedimage黑色像素斑点问题。求大神解决。

压缩太厉害了吧,75试试

Ⅷ JAVA与图像压缩

此篇转载。
----------------------------------------------------------------------
下面是一段给图片加上网站logo的代码,注意第12,13,14行设置了图片的压缩比。本例为不压缩原图片。

java 代码

BufferedImage image = ImageIO.read(new FileInputStream("c:\\base.jpg"));
//读取图标
BufferedImage image_biao = ImageIO.read(new FileInputStream(
"c:\\logo.gif"));
Graphics2D g = image.createGraphics();
g.drawImage(image_biao, 10, 10, image_biao.getWidth(null),
image_biao.getHeight(null), null);
g.dispose();
FileOutputStream out = new FileOutputStream("c:\\out.jpg");

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(image);
param.setQuality(1f, false);
encoder.setJPEGEncodeParam(param);
encoder.encode(image);
out.close();

setQuality

public void setQuality(float quality, boolean forceBaseline)

quality取值在 1.0 到 0.0 之间

Some guidelines: 0.75 high quality 0.5 medium quality 0.25 low quality

另外要得到一张指定高度和宽度的图片的话可以用以下代码:(接上面代码)

java 代码

BufferedImage tag = new BufferedImage(500, 300,image.getType());
tag.getGraphics().drawImage(image, 0, 0, 500, 300, null); //绘制缩小后的图

FileOutputStream out2 = new FileOutputStream("c:\\out2.jpg");

JPEGImageEncoder encoder2 = JPEGCodec.createJPEGEncoder(out2);
JPEGEncodeParam param2 = encoder.getDefaultJPEGEncodeParam(tag);
param2.setQuality(1f, false);
encoder2.setJPEGEncodeParam(param2);
encoder2.encode(tag);
out2.close();

注意第一行新建 BufferedImage 的时候要使用原图片的type,这样可以保证输出与原图片相同质量的图片。

Ⅸ java BufferedImage 如何使图像更小

貌似处理2D图形缩放用的是AffineTransform,在JDK文档(我看的中文的哈)里有详细的参数解释,只要学过数组相乘就行了。
此矩阵将源坐标 (x,y) 变换为目标坐标 (x',y'),这一过程将坐标视为列向量,并用矩阵乘以坐标向量,步骤如下:

[ x'] [ m00 m01 m02 ] [ x ] [ m00x + m01y + m02 ]
[ y'] = [ m10 m11 m12 ] [ y ] = [ m10x + m11y + m12 ]
[ 1 ] [ 0 0 1 ] [ 1 ] [ 1 ]
方法TYPE_MASK_SCALE可以进行缩放操作,主要是要会算哈,不会就去学线性代数,很简单的

Ⅹ java 图片的压缩

前面是转成JPG再转出

后面是直接输出

阅读全文

与bufferedimage取消压缩相关的资料

热点内容
卡尔曼滤波算法书籍 浏览:769
安卓手机怎么用爱思助手传文件进苹果手机上 浏览:844
安卓怎么下载60秒生存 浏览:803
外向式文件夹 浏览:240
dospdf 浏览:431
怎么修改腾讯云服务器ip 浏览:392
pdftoeps 浏览:496
为什么鸿蒙那么像安卓 浏览:736
安卓手机怎么拍自媒体视频 浏览:186
单片机各个中断的初始化 浏览:724
python怎么集合元素 浏览:481
python逐条解读 浏览:833
基于单片机的湿度控制 浏览:499
ios如何使用安卓的帐号 浏览:883
程序员公园采访 浏览:812
程序员实战教程要多长时间 浏览:979
企业数据加密技巧 浏览:135
租云服务器开发 浏览:814
程序员告白妈妈不同意 浏览:336
攻城掠地怎么查看服务器 浏览:601