Estou desenvolvendo um sistema em JSF2 e nele eu utilizo um componente GraphicImage. Funciona perfeitamente com upload etc… Mas estou tendo o seguinte problema, quando se tira uma foto com a máquina fotografica deitada ou invertida mesmo que na pasta do windows ela seja visualizada da forma correta acontece que quando faço o upload no sistema ela é visualizada da forma invertida por exemplo se foi tirada com a máquina de lado ela é visualizada de lado. Acho estranho, alguém conhece uma forma de resolver isso?
Uma possibilidade: o Windows (pelo menos o 7) gira a visualização da imagem de acordo com as informações de orientação da foto tirada (essas informações ficam dentro do próprio arquivo jpeg). Então, quando você olha pelo Windows Explorer, parece que a foto está “certa” (ou seja, uma foto tirada de lado aparece como girada 90 graus). Entretanto, a foto está mesmo girada, e qualquer visualizador de imagem irá exibi-la de lado. Quando você faz o upload, o navegador (que exibe o GraphicImage) exibe a foto do jeito que foi tirada (ou seja, de lado).
Uma opção é, ao terminar o upload, permitir o usuário ver a foto e girá-la antes de salvá-la, similar ao que faz o Facebook. Daí você grava a imagem alterada. Deve haver bibliotecas que facilitem essa ação, ou mesmo usando um BufferedImage (que já existe no Java) e um algoritmo simples de rotacionamento.
Abraço.
K
ktognoli
Obrigado TerraSkill por sua ajuda. Tentei fazer assim mas a imagem continua invertida e também recebo o erro:
publicvoiddoUpload(FileUploadEventevent){try{imagem=newDefaultStreamedContent(event.getFile().getInputstream());this.setFile(event.getFile());}catch(IOExceptione){//Tratamento de exceção}}publicStringupload()throwsIOException{diretorio=diretorio();aleatorio=aleatorio();newFile("D:\\sigcm\\galeria\\imagens\\"+this.diretorio+this.aleatorio).mkdir();UploadedFileuf=this.getFile();Filef=newFile("D:\\sigcm\\galeria\\imagens\\"+this.diretorio+this.aleatorio+"\\",this.aleatorio+uf.getFileName());InputStreamis=uf.getInputstream();// retorna um InputStreambyte[]b=newbyte[is.available()];OutputStreamos=newFileOutputStream(f);while(is.read(b)>0){os.write(b);}os.flush();os.close();is.close();FacesMessagemsg=newFacesMessage("Upload realizado com Sucesso!",uf.getFileName());FacesContext.getCurrentInstance().addMessage(null,msg);returnuf.getFileName();}
index.xhtml:
<p:commandButtonicon="ui-icon-arrowreturnthick-1-w"value="Girar a esquerda"onclick="PF('rotateAndResizeWidget').rotateLeft(90);returnfalse;" /><h:panelGroupid="companyImage"><p:graphicImagevalue="#{pessoaCadastroBean.imagem}"id="imagem"style="max-width: 100px; max-height: 100px;"cache="false"rendered="#{pessoaCadastroBean.imagem != null}"/><pe:imageRotateAndResizeid="rotateAndResize"for="imagem"widgetVar="rotateAndResizeWidget"/></h:panelGroup><p:fileUploadvalue="#{pessoaCadastroBean.file}"label="Procurar..."multiple="false"fileUploadListener="#{pessoaCadastroBean.doUpload}"auto="true"showButtons="false"update="companyImage"/><p:commandButtonvalue="Salvar"action="#{pessoaCadastroBean.salvar}"ajax="false"disable="false"actionListener="#{pessoaCadastroBean.upload}"icon="ui-icon-disk"update="@all"><f:setPropertyActionListenervalue="#{pessoaCadastroBean.arquivo}"target="#{pessoaCadastroBean.pessoa.url}"/></p:commandButton>