Java如何设置jpg质量
只是想编辑一些代码,以便输出jpg质量不是默认的低质量设置Java如何设置jpg质量,java,Java,只是想编辑一些代码,以便输出jpg质量不是默认的低质量设置 try { ImageIO.write(var6, "jpg", var7); } …当前正在使用 我看了其他一些设置质量的java示例,对java不是很熟悉,我在理解如何插入和修改一些示例时遇到了困难,我在使用java设置图像质量时看到了这些示例 ImageWriteParam iwparam = new JPEGImageWriteParam(Locale.getDefaul
try
{
ImageIO.write(var6, "jpg", var7);
}
…当前正在使用
我看了其他一些设置质量的java示例,对java不是很熟悉,我在理解如何插入和修改一些示例时遇到了困难,我在使用java设置图像质量时看到了这些示例
ImageWriteParam iwparam = new JPEGImageWriteParam(Locale.getDefault());
iwparam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
iwparam.setCompressionQuality(quality);
writer.write(null, new IIOImage(image, null, null), iwparam);
这是我试图找到工作的代码
public static String func_74292_a(File par0File, String par1Str, int par2, int par3)
{
File var4 = new File(par0File, "screenshots");
var4.mkdir();
int var5 = par2 * par3;
if (field_74293_b == null || field_74293_b.capacity() < var5)
{
field_74293_b = BufferUtils.createIntBuffer(var5);
field_74294_c = new int[var5];
}
GL11.glPixelStorei(GL11.GL_PACK_ALIGNMENT, 1);
GL11.glPixelStorei(GL11.GL_UNPACK_ALIGNMENT, 1);
field_74293_b.clear();
GL11.glReadPixels(0, 0, par2, par3, GL12.GL_BGRA, GL12.GL_UNSIGNED_INT_8_8_8_8_REV, field_74293_b);
field_74293_b.get(field_74294_c);
func_74289_a(field_74294_c, par2, par3);
BufferedImage var6 = new BufferedImage(par2, par3, 1);
var6.setRGB(0, 0, par2, par3, field_74294_c, 0, par2);
if (par1Str == null)
{
var7 = func_74290_a(var4);
}
else
{
var7 = new File(var4, par1Str);
}
try
{
ImageIO.write(var6, "jpg", var7);
}
catch (IOException var8)
{
;
}
Thread var7x = new Thread(new ScreenShotHelper$1());
var7x.start();
return "\u00a7aUploading Screenshot....";
}
private static File func_74290_a(File par0File)
{
String var1 = dateFormat.format(new Date()).toString();
int var2 = 1;
while (true)
{
File var3 = new File(par0File, var1 + (var2 == 1 ? "" : "_" + var2) + ".jpg");
if (!var3.exists())
{
return var3;
}
++var2;
}
}
公共静态字符串func_74292_a(文件par0File,字符串par1Str,int par2,int par3)
{
File var4=新文件(par0File,“屏幕截图”);
var4.mkdir();
int var5=par2*par3;
if(field_74293_b==null | | field_74293_b.capacity()
您可能需要详细说明代码的实际问题
一般来说,您使用的第二个狙击(或多或少)是正确的方法:
1) write(…)几乎所有东西都使用默认值,它不需要额外的配置
2) 如果要调整参数,例如压缩比,则应改用ImageWriter。您可以使用ImageWriter writer=ImageIO.getImageWritersByFormatName(“jpg”)代码>
3) 然后设置写入程序在ImageWriteParam实例上使用的配置参数。您可以直接实例化一个JPEGImageWriteParam
,但是如果您只是想更改压缩比,那么使用ImageWriteParam param=writer.getDefaultWriteParam()请求一个默认实例就更容易了代码>
4) 如上面代码snipplet所示设置压缩质量,并相应地将压缩类型设置为explicit
5) 调用writer.write(null,新IIOImage(image,null,null),iwparam)
基本上告诉writer实例创建一个没有元数据或嵌入缩略图的图像,该图像只包含BuffereImage,并使用在3)中创建的配置对象 终于用这段代码做到了
try
{
ImageOutputStream ios = ImageIO.createImageOutputStream(var7);
Iterator<ImageWriter> iter = ImageIO.getImageWritersByFormatName("jpeg");
ImageWriter writer = iter.next();
ImageWriteParam iwp = writer.getDefaultWriteParam();
iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
iwp.setCompressionQuality(0.85f);
writer.setOutput(ios);
writer.write(null, new IIOImage(var6,null,null),iwp);
writer.dispose();
//ImageIO.write(var6, "jpg", var7);
}
试试看
{
ImageOutputStream ios=ImageIO.createImageOutputStream(var7);
迭代器iter=ImageIO.getImageWritersByFormatName(“jpeg”);
ImageWriter writer=iter.next();
ImageWriteParam iwp=writer.getDefaultWriteParam();
iwp.setCompressionMode(ImageWriteParam.MODE_显式);
设置压缩质量(0.85f);
writer.setOutput(ios);
write.write(null,新IIOImage(var6,null,null),iwp);
writer.dispose();
//ImageIO.write(var6,“jpg”,var7);
}
我遇到了一个类似的问题,答案对我来说不是很清楚,因为当时我对ImageIO不太了解,所以对于像我这样看到这篇文章的人,我举了一个例子
try {
// Image to be altered
BufferedImage imagem = ImageIO.read(new File("c://nota.jpg"));
// The output image
File outPutImage = new File("c://nota2.jpg");
// Encapsulate the outPut image
ImageOutputStream ios = ImageIO.createImageOutputStream(outPutImage);
// List of ImageWritre's for jpeg format
Iterator<ImageWriter> iter = ImageIO.getImageWritersByFormatName("jpeg");
// Capture the first ImageWriter
ImageWriter writer = iter.next();
// define the o outPut file to the write
writer.setOutput(ios);
// Here you define the changes you wanna make to the image
ImageWriteParam iwParam = writer.getDefaultWriteParam();
iwParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
iwParam.setCompressionQuality(.90f);
// Compression and saving to file the altered image
writer.write(null, new IIOImage(imagem, null, null), iwParam);
writer.dispose();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
试试看{
//要更改的图像
BuffereImage imagem=ImageIO.read(新文件(“c://nota.jpg”);
//输出图像
File outPutImage=新文件(“c://nota2.jpg”);
//封装输出图像
ImageOutputStream ios=ImageIO.createImageOutputStream(outPutImage);
//jpeg格式的ImageWriter列表
迭代器iter=ImageIO.getImageWritersByFormatName(“jpeg”);
//捕获第一个ImageWriter
ImageWriter writer=iter.next();
//定义要写入的o输出文件
writer.setOutput(ios);
//在这里,您可以定义要对图像进行的更改
ImageWriteParam iwParam=writer.getDefaultWriteParam();
iwParam.setCompressionMode(ImageWriteParam.MODE_显式);
iwParam.setCompressionQuality(.90f);
//压缩并保存更改后的图像以归档
writer.write(null,新IIOImage(imagem,null,null),iwParam);
writer.dispose();
}捕获(IOE1异常){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
如果您知道一种更简单的方法,或者您发现我的注释或代码中有错误,请在注释中告诉我,以便我可以更改。尝试{ImageWriter writer writer=(ImageWriter)ImageIO.getImageWritersByFormatName(“jpg”);ImageWriteParam var7=writer.getDefaultWriteParam();var7.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);var7.setCompressionQuality(0.90f);writer.write(null,new IIOImage(var6,null,null,var7);//ImageIO.write(var6,“jpg”,var7);}我试过了,但没有用……很抱歉,我无法正确地输入代码。这个网站的性能很差