Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java如何设置jpg质量_Java - Fatal编程技术网

Java如何设置jpg质量

Java如何设置jpg质量,java,Java,只是想编辑一些代码,以便输出jpg质量不是默认的低质量设置 try { ImageIO.write(var6, "jpg", var7); } …当前正在使用 我看了其他一些设置质量的java示例,对java不是很熟悉,我在理解如何插入和修改一些示例时遇到了困难,我在使用java设置图像质量时看到了这些示例 ImageWriteParam iwparam = new JPEGImageWriteParam(Locale.getDefaul

只是想编辑一些代码,以便输出jpg质量不是默认的低质量设置

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);}我试过了,但没有用……很抱歉,我无法正确地输入代码。这个网站的性能很差