0
다음 예제를 만들었지 만 왜 작동하지 않는 것인지 알 수 없습니다. 내가 읽기 및 쓰기 권한이 있어야 ImageIO.write()로 jpg를 덮어 쓰지 않습니다.
- ,
- 예외가 발생하지 않았을 때 ImageIO에서이 이미지를 덮어 사실이 있다고 응답
- , ...
하지만 여전히 디스크의 이미지는 변경되지 않았습니다.
그것은 덮어import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;
public class example
{
public static void main(String[] args)
{
try
{
// load a jpg file
File imageFile = getFile();
// Make a Buffered Image from it
BufferedImage img = ImageIO.read(imageFile);
// for every pixel in the image
for (int x = 0; x < img.getWidth(); x++)
for (int y = 0; y < img.getHeight(); y++)
// check if the RGB integer is an odd number
if (img.getRGB(x, y) % 2 != 0)
// make it an even number if it is odd (the OCD god demands it!)
img.setRGB(x, y, img.getRGB(x, y) - 1);
// Write the OCD friendly version to the file
System.out.println("Was overwritten: " + ImageIO.write(img, "jpg", imageFile));
System.out.println();
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Select the same file again
imageFile = getFile();
// Make the bufferedImage from it
img = ImageIO.read(imageFile);
// for every pixel in the image
for (int x = 0; x < img.getWidth(); x++)
for (int y = 0; y < img.getHeight(); y++)
// check if the RGB integer is an odd number
if (img.getRGB(x, y) % 2 != 0)
{
// Report the failing
System.out.println("It didn't work :(");
// Stop the loop
x = img.getWidth();
y = img.getHeight();
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static File getFile()
{
// set up a file chooser that only accepts jpgs
JFileChooser chooser = new JFileChooser();
chooser.setFileFilter(new FileNameExtensionFilter("JPG Images only", "jpg"));
// This will represent our loaded file
File imageFile = null;
// Select a file
chooser.showOpenDialog(null);
imageFile = chooser.getSelectedFile();
// Check we can do stuff to this file
System.out.println("Exists: " + imageFile.exists());
System.out.println("Can Read: " + imageFile.canRead());
System.out.println("Can Write: " + imageFile.canWrite());
System.out.println();
return imageFile;
}
}
그래서이 줄을 /// img.setRGB (x, y, 0)로 설정했습니다. /// 이미지를 수정하는 동안, 그것은 단순한 색상으로 설정하는 대신 이상한 일들을 했었습니다. 기본 이미지는 보여 주지만, 대부분 정전기에서 사라졌습니다. 도대체 무슨 일이 일어나고 있니?! 그것은 마치 흰색과 검은 색의 정적 배경에 원본 이미지를 겹치려고하는 것과 같습니다. 이건 jpg 압축과 관련이 있습니까? – Troyseph
정확히 무엇을 하려는지는 모르지만 이미지는 덮어 씁니다. 이것은 당신의 질문이었습니다. –
위의 예제는 정말 코드가 다운되었습니다. 홀수 번호의 픽셀이 '1'을 나타내는 픽셀과 심지어 '0'을 나타내는 픽셀을 사용하여 이미지에서 데이터를 숨겨서 놀았습니다. 따라서 이상적으로 픽셀을 변경하고 싶습니다. 값 하나가 변경되지 않습니다. 내 문제는 만약 당신이 원래의 프로그램을 실행하고 심지어 모든 픽셀을 확인한 다음 그 이미지를 다시 검사하면 여전히 홀수 픽셀을 가지고 있습니다 ... – Troyseph