2011-05-18 4 views
3

J'utilise un format commun partout pour les images comme png.Toute image jpg téléchargée est toujours enregistrée en tant que png en utilisant le code ci-dessous.Java JPG To Png

java.awt.image.BufferedImage bufferedImage = ImageIO.read(jpgImagePAth); 

if(!IsExtensionPng(jpgImagePath)){ 
     ImageIO.write(bufferedImage, "png", new File(pptFolder, justNamePng)); 
    } 

Mais cela préserve alpha, même si elle était pas là dans le jpg fait donc une image 2MB et 7MB 6MB à 16MB. Y at-il de toute façon pour sauver png sans maintenir l'alpha?

La raison pour laquelle je dois converger vers le format PNG est que plus tard lorsque j'ajoute du texte sur une image, la résolution réelle est perdue. J'ai déjà essayé JPEG sans valeur qui ne l'a pas réparé.

+0

Les "images téléchargées", comment les utiliseriez-vous? En fonction de cette réponse, je peux peut-être suggérer quelque chose ... –

+0

jpgImagePAth C'est là que l'image jpg est déjà téléchargée. –

+1

Je veux dire, une fois qu'ils sont téléchargés et stockés sur le disque dur. Est-ce pour une application de bureau? Si oui, expliquez un peu. Allez-vous les servir sur Internet? De combien d'images parlons-nous? Les utiliseriez-vous beaucoup? –

Répondre

2

Ce n'est pas le canal alpha qui provoque la croissance de la taille du fichier, c'est le type de fichier. JPG utilise une compression avec perte; PNG est une compression sans perte. En d'autres termes, JPG jette des données pour réduire la taille du fichier. C'est pourquoi vous choisissez un niveau de qualité lors de l'enregistrement au format JPG, ce qui détermine le montant dépensé.

Comment savez-vous que vous obtenez le canal alpha de toute façon? Si vous voulez toujours le format PNG et que vous voulez être sûr que vous supprimez le canal alpha, définissez le type d'image sur BufferedImage.TYPE_RGB, par exemple.

BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_RGB); 

Vous devez obtenir l'objet graphique associé à votre nouveau BufferedImage et copiez le jpg sur elle, puis l'écrire. This question n'est pas tout à fait la même chose que la vôtre mais a un exemple de code que vous pouvez trouver utile.

Paul

+0

L'image JPG n'est pas transparente. Donc, lorsque l'utilisateur télécharge JPG, je ne veux pas utiliser l'alpha, je pense que –

+0

+1 parce que le type 'BufferedImage' semble le coupable le plus probable si un canal alpha est stocké. On dirait que OP a probablement une bonne raison de choisir PNG. L'espace de stockage est bon marché, mais il semble stupide de stocker un canal alpha inutilisé. – eaj

+0

Oui, je sais que les images JPG ne sont pas transparentes. Je me demandais pourquoi vous pensiez que les PNG que vous écriviez contenaient des informations sur la transparence. – Paul

1

Je ne sais pas exactement dans quelle situation vous êtes. Mais je devrais garder JPEG JPEG. Le seul avantage de convertir JPEG en PNG est gaspiller de l'espace hdd.

+1

Je suppose que c'était dans l'édition qui a été faite après votre réponse, mais empêcher les artefacts de distorsion autour des lettres est un avantage certain du format PNG par rapport au format JPEG. – Olaf

+2

@Olaf: Oui c'est définitivement vrai. Mais c'est un avantage de PNG, pas un avantage de convertir de JPEG en PNG. –