2011-01-10 3 views
2

저는 (서버 측 디렉토리에) 이미지 파일을 만드는 데 사용하려는 Processing 스케치와 관련된 문제로 고심하고 있습니다. 자바에서는 캔버스의 PImage를 사용하여 BufferedImage로 변환 한 다음 ImageIO.write를 통해 파일로 만듭니다.애플릿이 ImageIO.write를 통해 이미지 파일을 만들지 않습니다.

내 시스템에서 스케치로 실행하면 파일이 성공적으로 생성되며 file.png는 프로그램과 동일한 폴더에 나타납니다. 문제는 프로그램을 애플릿으로 내 보내면 더 이상 파일을 만들지 않는다는 것입니다. 누구나 프로그램의 스케치가 이미지를 만들 수 있지만 애플릿이 왜 그렇게 할 수 없는지에 대한 의견이 있다면 거대합니다.

다음은 몇 가지 도움이 필요한 경우 사용하고있는 몇 가지 스 니펫입니다. 모두에게 감사드립니다.

PImage pimg = get(); 
BufferedImage canvas = convertToBufferedImage(pimg); 
File file = new File("./sketch/file.png"); 
try 
{ 
    ImageIO.write(canvas, "PNG", file); 
} 
catch (Exception e) { println(e); } 

그리고 다음은 PImage를 BufferedImage로 변환하는 방법입니다.

BufferedImage convertToBufferedImage(PImage pimg){ 
    PGraphics pg = createGraphics(width, height, JAVA2D); 
    pg.image(pimg, 0, 0); 
    BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB_PRE); 
    Graphics2D g2d = img.createGraphics(); 
    g2d.drawImage((java.awt.Image)pg.image, 0, 0, width, height, this); 
    g2d.finalize(); 
    g2d.dispose(); 
    return img; 
} 
+0

변경시 예외는 없습니다. 애플릿은 정상적으로 실행되지만 디렉토리에는 이미지 파일이 생성되지 않습니다. 또 다른 이상한 점은 그것이 스케치 일 때 경로가 단지 "file.png"일 경우 부모 디렉토리에 실제로 파일을 생성하므로 경로를 "./sketch/file.png"로 유지해야합니다. 스케치와 같은 디렉토리에 있습니다. 애플릿으로 내보낼 때, "./applet/file.png"또는 단순히 "file.png"로 변경하면 여전히 볼 수 없습니다. – Scott

+0

시도해보십시오. 스케치로 실행하면 true를 반환하고 .png 파일이 성공적으로 생성되었습니다. 애플릿으로 실행할 때 나는 여전히 오류가 없다. – Scott

+1

애플릿은 서버 측 파일에 액세스 할 수 없습니다. 그렇게하고 싶다면 서블릿을 작성해야한다. – OrangeDog

답변

1

필자는 클라이언트 시스템에서 파일 시스템을 수정하지 못하도록하는 애플릿 보안 제한이라고 생각합니다.

JNLP에서 FileSaveService을 살펴보십시오. 서명되지 않은 애플릿에서 클라이언트 시스템의 파일 시스템에 파일을 저장하는 데 사용할 수 있습니다.

애플릿에서 서버의 디렉토리에 쓰려고하면 직접 할 수 없습니다. 서버에 업로드 양식을 작성하고 HttpURLConnection을 사용하여 서버에 POST 요청을 보내야합니다.

+0

이렇게하려면 ImageIO.write를 잘못 작성하십시오. BufferedImage를 Base64String로 인코딩하는 것과 같은 솔루션을 보았습니다.이 솔루션은 PHP에 의해 수신 및 디코딩되었습니다. BufferedImage를 PHP에 업로드하여 서버에서 업로드 할 수있는 적절한 방법입니까? – Scott

+0

@Scott,'ImageIO.write'를 사용하여 이미지를 인코딩하는 데는 아무런 문제가 없지만 파일 대신'HttpURLConnection' 또는 바이트 배열로 보내야합니다. [이 질문에 대한 답변] (http://stackoverflow.com/questions/1314249/java-upload-and-post-file-to-php-page)과 [this one] (http : // http://www.google.com/support/aw/bin/answer.py?answer=1599018/java-applet-to-upload-a-file). – finnw

+0

많은 사람들에게 지식의 선물을 주셔서 감사합니다. 아마 내 문제에 대한 가장 유망한 해결책은이 것이었다. http://stackoverflow.com/questions/1889881/using-processing-on-a-server-to-create-images-behind-the-scenes/2006597#2006597 – Scott