Попытка намеренно испортить изображения с помощью bufferedImages - PullRequest
0 голосов
/ 31 марта 2019

Я пытаюсь сознательно испортить входное изображение.

        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"));

Когда я преобразовываю свое изображение в байтовый массив и изменяю значения, оно иногда выводит серые пиксели вместо случайных цветных. Вот мой ввод и вывод (мой друг предложил изображение, а не я).

входное изображение и выходное изображение

Я также провел некоторые исследования и обнаружил, что если я открою файл в шестнадцатеричном редакторе и изменим значения случайным образом, это даст мне желаемый результат. Может быть, я мог бы как-то повторить это в Java? ( желаемое изображение . Не против, если оно будет более запутанным.)

1 Ответ

0 голосов
/ 31 марта 2019

Вы должны использовать вместо "png"

...