Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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 试图使用BuffereImage故意损坏图像_Java_Image_Corruption - Fatal编程技术网

Java 试图使用BuffereImage故意损坏图像

Java 试图使用BuffereImage故意损坏图像,java,image,corruption,Java,Image,Corruption,我试图故意损坏输入图像 BufferedImage bImage = ImageIO.read(new File("input.jpg")); ByteArrayOutputStream bos = new ByteArrayOutputStream(); ImageIO.write(bImage, "jpg", bos); byte[] data = bos.toByteArray(); for (int x =

我试图故意损坏输入图像

        BufferedImage bImage = ImageIO.read(new File("input.jpg"));
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ImageIO.write(bImage, "jpg", bos);
        byte[] data = bos.toByteArray();

        for (int x = 0; x < bImage.getHeight(); x++) {
                int yesNo = (int) Math.round(Math.random());
                int r = (int) (Math.random() * 255);
                int g = (int) (Math.random() * 255);
                int b = (int) (Math.random() * 255);
                Color myColor = new Color(r, g, b);

                if (yesNo == 1) {
                    data[x] = (byte) myColor.getRGB();
                }
        }

        ByteArrayInputStream bis = new ByteArrayInputStream(data);
        BufferedImage bImage2 = ImageIO.read(bis);
        ImageIO.write(bImage2, "jpg", new File("output.jpg"));
BufferedImage bImage=ImageIO.read(新文件(“input.jpg”);
ByteArrayOutputStream bos=新建ByteArrayOutputStream();
ImageIO.write(双图像,“jpg”,bos);
字节[]数据=bos.toByteArray();
对于(int x=0;x
当我将图像转换为字节数组并更改值时,它有时会输出灰色像素,而不是随机着色的像素。这是我的输入和输出(我的朋友建议的图像不是我)


我也做了一些研究,我发现如果我在十六进制编辑器中打开文件并随机更改值,它会给出我想要的结果。也许我可以用java复制一下?(.不介意它是否更混乱。)

您应该使用“png”来代替MT

缓冲图像使用jpg而不是png。@未经测试的缓冲图像将以您告诉它的任何格式写入,我使用它来写入pngs@unprotested你错了,我用过它,但没用problem@phflack我将JPGs更改为PNGs,它给了我以下错误:IOException:javax.imageio.IIOException:无法读取输入文件@未经测试哦,只是刚刚意识到你改变了读写。如果你试着把.jpg读成.png,它会发疯的,因为它们是不同的格式。您应该能够将
BufferedImage
编写为.png而没有问题,同时仍将.jpg作为.jpgIt读取,而不是试图破坏图像,你真的想破坏二进制文件吗?@phflack只要输出的jpg或png文件被弄乱了,这对我来说无关紧要。这取决于你期望的更改类型。如果你试图将随机像素更改为新值,我怀疑你想使用BuffereImage进行编辑。您当前的代码可能正在读取原始文件并对元数据进行编辑,这不是更改十六进制值所做的吗?通常情况下,图像文件是压缩的,并且开头往往是关于文件其余部分的数据。如果你搞砸了,可能会发生意想不到的事情。如果这就是您的目标,那么您应该使用
Random.nextByte()
,而不是混用
(byte)Color.getRGB()
?目前,您正在生成一个24位数字,然后获取最后8位(也称为绿色值)