Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

manipulation d'images

6 réponses
Avatar
Lam
bonjour j'ai un pb avec la manipulation d'images
je cree un ImageIcon a partir d'un byte[]
je peux ensuite redimensionner cette image.
J'aimerais ensuite retourner le nouveau byte[] correspondant a cette
image.
je ne vois pas comment faire
qq'un a une idee ?

merci

--
Lam

6 réponses

Avatar
owowl
bonjour j'ai un pb avec la manipulation d'images
je cree un ImageIcon a partir d'un byte[]
je peux ensuite redimensionner cette image.
J'aimerais ensuite retourner le nouveau byte[] correspondant a cette
image.
je ne vois pas comment faire
qq'un a une idee ?

merci



on peut nottament faire ca avec le JAI de sun

Olivier

Avatar
Pierre Gilquin
Voila une methode qui redimensionne une image pour qu'elle ne fasse plus que
maxDim selon l'age des x(je crois)
elle utilise le codec jpeg qui est quand meme fourni


import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.sun.image.codec.jpeg.JPEGCodec;
import autres ...

public static byte[] createThumbnail(byte[] orig, int maxDim) {
byte[] toReturn = null;
// public void createThumbnail(String origFile, String targetFile, int
maxDim) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
System.out.println("Resizing data in orig with maxDim of: " +
maxDim);
try {
Image inImage = Toolkit.getDefaultToolkit().createImage(orig);
MediaTracker mediaTracker = new MediaTracker(new JPanel());
mediaTracker.addImage(inImage, 0);
try
{
mediaTracker.waitForID(0);
}
catch (InterruptedException ie)
{
System.err.println(ie);
System.exit(1);
}

// Determine the scale.
double scale = (double)maxDim/(double)inImage.getHeight(null);
if (inImage.getWidth(null) > inImage.getHeight(null)) {
scale = (double)maxDim/(double)inImage.getWidth(null);
}

// Determine size of new image.
//One of them
// should equal maxDim.
int scaledW = (int)(scale*inImage.getWidth(null));
int scaledH = (int)(scale*inImage.getHeight(null));
System.out.println("Scaled size: " + scaledW + " x " +scaledH);
// Create an image buffer in
//which to paint on.
BufferedImage outImage = new
BufferedImage(scaledW,scaledH,BufferedImage.TYPE_INT_RGB);
System.out.println("New image: " + outImage.getWidth(null)
+ " x " + outImage.getHeight(null));
// Set the scale.
AffineTransform tx = new AffineTransform();

// If the image is smaller than
//the desired image size,
// don't bother scaling.
System.out.println("Our scale: " + scale);
if (scale < 1.0d) {
tx.scale(scale, scale);
}

// Paint image.
Graphics2D g2d = outImage.createGraphics();
g2d.drawImage(inImage, tx, null);
g2d.dispose();

// JPEG-encode the image
//and write to file.
//OutputStream os = new FileOutputStream(thumb);
JPEGImageEncoder encoder JPEGCodec.createJPEGEncoder(outputStream);
encoder.encode(outImage);
/*
FileOutputStream fos = new FileOutputStream(targetFile);
fos.write(outputStream.toByteArray());
*/
toReturn = outputStream.toByteArray();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
return toReturn;
}

"Lam" wrote in message
news:

bonjour j'ai un pb avec la manipulation d'images
je cree un ImageIcon a partir d'un byte[]
je peux ensuite redimensionner cette image.
J'aimerais ensuite retourner le nouveau byte[] correspondant a cette
image.
je ne vois pas comment faire
qq'un a une idee ?

merci

--
Lam


Avatar
Delrue David
Lam wrote:
bonjour j'ai un pb avec la manipulation d'images
je cree un ImageIcon a partir d'un byte[]
je peux ensuite redimensionner cette image.
J'aimerais ensuite retourner le nouveau byte[] correspondant a cette
image.
je ne vois pas comment faire
qq'un a une idee ?

merci



J'ai déjà eu l'occasion de d'essayer JAI, mais le résultat ne m'a pas
convaincu, l'image était trop abîmé et le processus prenait trop de temps.

J'ai choisi JMagick avec imagemagick.

http://www.yeo.id.au/jmagick/

http://www.imagemagick.org/script/index.php

Ils ont une mailing list qui fonctionne très bien ( en anglais)

Le résultat est nettement meilleur

@+
--
David Delrue

_-`````-, ,- '- .
.' .- - | | - -. `.
/.' / `.
:/ : _... ..._ `` :
:: : /._ .`:'_.._. || :
:: `._ ./ ,` : . _.'' .
`:. / | -. -. _ /
:._ _/ .' .@) @) ` ` ,.'
_/,--' .- .,-.`--`.
,'/'' (( ` )
/'/' `-' (
'/'' `._,-----'
''/' .,---'
''/' ;:
''/'' ''/
''/''/''
'/'/'
`;

We are Penguin. Resistance is futile. You will be assimilated.

Avatar
Lam
merci
mais en fait je peux recevoir des gifs, png, jpeg ... ou tout autre
types d'images


"Pierre Gilquin" writes:

Voila une methode qui redimensionne une image pour qu'elle ne fasse plus que
maxDim selon l'age des x(je crois)
elle utilise le codec jpeg qui est quand meme fourni


import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.sun.image.codec.jpeg.JPEGCodec;
import autres ...

public static byte[] createThumbnail(byte[] orig, int maxDim) {
byte[] toReturn = null;
// public void createThumbnail(String origFile, String targetFile, int
maxDim) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
System.out.println("Resizing data in orig with maxDim of: " +
maxDim);
try {
Image inImage = Toolkit.getDefaultToolkit().createImage(orig);
MediaTracker mediaTracker = new MediaTracker(new JPanel());
mediaTracker.addImage(inImage, 0);
try
{
mediaTracker.waitForID(0);
}
catch (InterruptedException ie)
{
System.err.println(ie);
System.exit(1);
}

// Determine the scale.
double scale = (double)maxDim/(double)inImage.getHeight(null);
if (inImage.getWidth(null) > inImage.getHeight(null)) {
scale = (double)maxDim/(double)inImage.getWidth(null);
}

// Determine size of new image.
//One of them
// should equal maxDim.
int scaledW = (int)(scale*inImage.getWidth(null));
int scaledH = (int)(scale*inImage.getHeight(null));
System.out.println("Scaled size: " + scaledW + " x " +scaledH);
// Create an image buffer in
//which to paint on.
BufferedImage outImage = new
BufferedImage(scaledW,scaledH,BufferedImage.TYPE_INT_RGB);
System.out.println("New image: " + outImage.getWidth(null)
+ " x " + outImage.getHeight(null));
// Set the scale.
AffineTransform tx = new AffineTransform();

// If the image is smaller than
//the desired image size,
// don't bother scaling.
System.out.println("Our scale: " + scale);
if (scale < 1.0d) {
tx.scale(scale, scale);
}

// Paint image.
Graphics2D g2d = outImage.createGraphics();
g2d.drawImage(inImage, tx, null);
g2d.dispose();

// JPEG-encode the image
//and write to file.
//OutputStream os = new FileOutputStream(thumb);
JPEGImageEncoder encoder > JPEGCodec.createJPEGEncoder(outputStream);
encoder.encode(outImage);
/*
FileOutputStream fos = new FileOutputStream(targetFile);
fos.write(outputStream.toByteArray());
*/
toReturn = outputStream.toByteArray();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
return toReturn;
}

"Lam" wrote in message
news:

bonjour j'ai un pb avec la manipulation d'images
je cree un ImageIcon a partir d'un byte[]
je peux ensuite redimensionner cette image.
J'aimerais ensuite retourner le nouveau byte[] correspondant a cette
image.
je ne vois pas comment faire
qq'un a une idee ?

merci

--
Lam





--
Lam


Avatar
dnasmars
essaye de voir coté imagemagick
peut etre que tu y trouveras ton bonheur
:)
sinon acme aussi
Lam wrote:
merci
mais en fait je peux recevoir des gifs, png, jpeg ... ou tout autre
types d'images


"Pierre Gilquin" writes:


Voila une methode qui redimensionne une image pour qu'elle ne fasse plus que
maxDim selon l'age des x(je crois)
elle utilise le codec jpeg qui est quand meme fourni


import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.sun.image.codec.jpeg.JPEGCodec;
import autres ...

public static byte[] createThumbnail(byte[] orig, int maxDim) {
byte[] toReturn = null;
// public void createThumbnail(String origFile, String targetFile, int
maxDim) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
System.out.println("Resizing data in orig with maxDim of: " +
maxDim);
try {
Image inImage = Toolkit.getDefaultToolkit().createImage(orig);
MediaTracker mediaTracker = new MediaTracker(new JPanel());
mediaTracker.addImage(inImage, 0);
try
{
mediaTracker.waitForID(0);
}
catch (InterruptedException ie)
{
System.err.println(ie);
System.exit(1);
}

// Determine the scale.
double scale = (double)maxDim/(double)inImage.getHeight(null);
if (inImage.getWidth(null) > inImage.getHeight(null)) {
scale = (double)maxDim/(double)inImage.getWidth(null);
}

// Determine size of new image.
//One of them
// should equal maxDim.
int scaledW = (int)(scale*inImage.getWidth(null));
int scaledH = (int)(scale*inImage.getHeight(null));
System.out.println("Scaled size: " + scaledW + " x " +scaledH);
// Create an image buffer in
//which to paint on.
BufferedImage outImage = new
BufferedImage(scaledW,scaledH,BufferedImage.TYPE_INT_RGB);
System.out.println("New image: " + outImage.getWidth(null)
+ " x " + outImage.getHeight(null));
// Set the scale.
AffineTransform tx = new AffineTransform();

// If the image is smaller than
//the desired image size,
// don't bother scaling.
System.out.println("Our scale: " + scale);
if (scale < 1.0d) {
tx.scale(scale, scale);
}

// Paint image.
Graphics2D g2d = outImage.createGraphics();
g2d.drawImage(inImage, tx, null);
g2d.dispose();

// JPEG-encode the image
//and write to file.
//OutputStream os = new FileOutputStream(thumb);
JPEGImageEncoder encoder >>JPEGCodec.createJPEGEncoder(outputStream);
encoder.encode(outImage);
/*
FileOutputStream fos = new FileOutputStream(targetFile);
fos.write(outputStream.toByteArray());
*/
toReturn = outputStream.toByteArray();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
return toReturn;
}

"Lam" wrote in message
news:

bonjour j'ai un pb avec la manipulation d'images
je cree un ImageIcon a partir d'un byte[]
je peux ensuite redimensionner cette image.
J'aimerais ensuite retourner le nouveau byte[] correspondant a cette
image.
je ne vois pas comment faire
qq'un a une idee ?

merci

--
Lam









Avatar
Alex
tu peux essayer ImageJ (cf google)
C'est un soft de traitement d'image dont l'API est assez simple à utiliser.

De mémoire :
ImagePlus image = new ImagePlus(url);
Processor proc = image.getProcessor();

et tu as probablement un proc.resize

personnellement je trouve que JAI est très vite trop complexe.

Bon courage

Alex

merci
mais en fait je peux recevoir des gifs, png, jpeg ... ou tout autre
types d'images


"Pierre Gilquin" writes:


Voila une methode qui redimensionne une image pour qu'elle ne fasse plus que
maxDim selon l'age des x(je crois)
elle utilise le codec jpeg qui est quand meme fourni


import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.sun.image.codec.jpeg.JPEGCodec;
import autres ...

public static byte[] createThumbnail(byte[] orig, int maxDim) {
byte[] toReturn = null;
// public void createThumbnail(String origFile, String targetFile, int
maxDim) {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
System.out.println("Resizing data in orig with maxDim of: " +
maxDim);
try {
Image inImage = Toolkit.getDefaultToolkit().createImage(orig);
MediaTracker mediaTracker = new MediaTracker(new JPanel());
mediaTracker.addImage(inImage, 0);
try
{
mediaTracker.waitForID(0);
}
catch (InterruptedException ie)
{
System.err.println(ie);
System.exit(1);
}

// Determine the scale.
double scale = (double)maxDim/(double)inImage.getHeight(null);
if (inImage.getWidth(null) > inImage.getHeight(null)) {
scale = (double)maxDim/(double)inImage.getWidth(null);
}

// Determine size of new image.
//One of them
// should equal maxDim.
int scaledW = (int)(scale*inImage.getWidth(null));
int scaledH = (int)(scale*inImage.getHeight(null));
System.out.println("Scaled size: " + scaledW + " x " +scaledH);
// Create an image buffer in
//which to paint on.
BufferedImage outImage = new
BufferedImage(scaledW,scaledH,BufferedImage.TYPE_INT_RGB);
System.out.println("New image: " + outImage.getWidth(null)
+ " x " + outImage.getHeight(null));
// Set the scale.
AffineTransform tx = new AffineTransform();

// If the image is smaller than
//the desired image size,
// don't bother scaling.
System.out.println("Our scale: " + scale);
if (scale < 1.0d) {
tx.scale(scale, scale);
}

// Paint image.
Graphics2D g2d = outImage.createGraphics();
g2d.drawImage(inImage, tx, null);
g2d.dispose();

// JPEG-encode the image
//and write to file.
//OutputStream os = new FileOutputStream(thumb);
JPEGImageEncoder encoder >>JPEGCodec.createJPEGEncoder(outputStream);
encoder.encode(outImage);
/*
FileOutputStream fos = new FileOutputStream(targetFile);
fos.write(outputStream.toByteArray());
*/
toReturn = outputStream.toByteArray();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
return toReturn;
}

"Lam" wrote in message
news:

bonjour j'ai un pb avec la manipulation d'images
je cree un ImageIcon a partir d'un byte[]
je peux ensuite redimensionner cette image.
J'aimerais ensuite retourner le nouveau byte[] correspondant a cette
image.
je ne vois pas comment faire
qq'un a une idee ?

merci

--
Lam