Java conversion byte[] à l'image
Je sais que cela semble comme une question commune mais j'ai regardé tous sur les internets, et j'ai essayé beaucoup de différents tutoriels et des méthodes pour cela. Je pense que je suis proche, mais pas sûr. Aussi je suis à l'aide de Play Framework, mais il doit être le même pour java.
voici mon erreur
javax.image.IIOException: I/O error reading PNG header!
at com.sun.plugins.png.PNGImageReader.readHeader(Unknown Source)
...
...
Caused by: java.io.EOFException
at javax.imageio.stream.ImageInputStreamImpl.readFully(Unknown Source)
...
Voici mon code où je reçois l'image, entre autres choses, à partir d'un formulaire et de le convertir l'image à un byte[] et de les stocker dans MS SQL db.
@Transactional
public static Result submitTrailer(){
filledForm = newTrailerForm.bindFromRequest();
MultipartFormData body = request().body().asMultipartFormData();
FilePart picture = body.getFile("file");
String fileName = picture.getFilename();
System.out.println(fileName);
String contentType = picture.getContentType();
System.out.println(contentType);
final File file = picture.getFile();
filledForm.get().setContentType(contentType);
try{
BufferedImage originalImage = ImageIO.read(file);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(originalImage, contentType, baos);
filledForm.get().setImage(baos.toByteArray());
baos.flush();
baos.close();
filledForm.get().save();
}catch(IOException e){
e.printStackTrace();
}
return ok(views.html.index.index.render());
}
c'est là que je suis en train de convertir le byte[] retour à une image afin que je puisse l'afficher en html
public File getConvertedPicture(){
File imageFile;
System.out.println("byteToImage() called");
if(getImage()==null){
System.out.println("getByteImage()==null");
return null;
}else{
try{
ByteArrayInputStream bis = new ByteArrayInputStream(getImage());
imageFile=File.createTempFile("pattern", ".suffix");
Iterator<?> readers = ImageIO.getImageReadersByFormatName("PNG");
ImageReader reader = (ImageReader) readers.next();
Object source = bis;
ImageInputStream iis = ImageIO.createImageInputStream(source);
reader.setInput(iis, true);
ImageReadParam param = reader.getDefaultReadParam();
Image image = reader.read(0, param);
BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = bufferedImage.createGraphics();
g2.drawImage(image, null, null);
ImageIO.write(bufferedImage,"PNG", imageFile);
return imageFile;
}
catch(IOException e){
e.printStackTrace();
return null;
}
}
Je suis un débutant, c'est ma première fois à l'aide de jeu, et la première fois à l'aide de bases de données. Tous les conseils pour obtenir ce travail serait grandement apprécié.
aussi, dans ma méthode getConvertedPicture (), je dois spécifier le type de format, est-il de toute façon de contourner ce problème afin que l'utilisateur peut télécharger n'importe quel type d'image qu'ils veulent.
getImage()
ne sont pas assez. Avez-vous vérifier ??Non, je ne suis pas sûr de savoir comment. J'ai vérifié pour s'assurer de la présence de données dans mais vous ne savez pas comment faire pour vérifier si elle était réellement stocké correctement.
OriginalL'auteur mingle | 2012-06-28
Vous devez vous connecter pour publier un commentaire.
Essayez d'utiliser
OriginalL'auteur Real Pongsakorn Jaranupong
Pour convertir les octets d'une image sans connaître le type de fichier j'ai l'habitude de faire:
Qui sera de retour une BufferedImage que vous pouvez enregistrer dans n'importe quel format d'image tels que jpg.
Pour écrire l'image d'un tableau d'octets:
OriginalL'auteur David
Pour convertir un tableau d'octets, c'est à dire
byte[]
dans une image, utilisezgetImage()
. Probablement la façon la plus simple pour ce faire est d'instancier unImageIcon
à l'aide de laImageIcon(byte[])
constructeur, et ensuite appelergetImage()
. Ceci est illustré dans la méthode ci-dessous, en particulier la dernière ligne:Je pense que cela peut être utilisé pour
png
,gif
,bmp
, etjpg
images. Le tableau d'octets ne doit pas être codée en dur, comme dans cet exemple.En outre,
new ImageIcon("image.png").getImage()
peut être utilisé pour charger une image affichable à partir d'un fichier, oùimage.png
est le nom de fichier.OriginalL'auteur ctype.h