Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.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中_Java_Image Compression - Fatal编程技术网

压缩图像而不保存它——在Java中

压缩图像而不保存它——在Java中,java,image-compression,Java,Image Compression,在Java中,有没有一种方法可以在保存图像的情况下计算压缩图像的大小?(这将用于确定将图像压缩到特定大小所需的质量。) ,但在Java而不是C#中,流可能是一条死胡同。这里是一个简单的实现 public class LengthCounterOutputStream extends OutputStream{ private int byteCounter = 0; @Override public void write(int b){ byteCou

在Java中,有没有一种方法可以在保存图像的情况下计算压缩图像的大小?(这将用于确定将图像压缩到特定大小所需的质量。)


,但在Java而不是C#中,流可能是一条死胡同。

这里是一个简单的实现

public class LengthCounterOutputStream extends OutputStream{

    private int byteCounter = 0;

    @Override
    public void write(int b){
        byteCounter++;
    }

    @Override
    public void write(@NotNull byte[] b){
        this.write(b, 0, b.length);
    }

    @Override
    public void write(@NotNull byte[] b, int off, int len){
        byteCounter += len;
    }

    public int getByteCounter(){
        return byteCounter;
    }
}

Java的
MemoryStream
等效于
ByteArrayOutputStream
。一旦你压缩了图像,你就可以得到以字节为单位的大小并丢弃流。@反斜杠:我担心答案是写我自己的,但有没有一个流我可以使用,它甚至不会将数据保存在内存中,但仍然允许我确定大小?@ScottHunter AFAIK没有默认方法。但是您可以扩展InputStream,只需计算长度,而不是存储字节。应该是painless@MatthewKerian:你是说OutputStream,对吗?@ScottHunter是的,我的错