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

Rotation imag

4 réponses
Avatar
1 connu
Bonjour,

J'ai fait un petit programme qui permet d'ecrire un texte, faire une rotation et en recuperer l'image dans un jpeg.
Maheureusement impossible de lui faire faire la rotation. Tout le reste marche.

Merci pour votre aide.


Pierre


public class CreateImage {
public CreateImage(String texte) {
try
{
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

BufferedImage outImage =
new BufferedImage(100,
30,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = outImage.createGraphics();
g.setBackground(Color.white);
g.clearRect(0,0,100,30);
g.setColor(Color.red);
g.drawString(texte, 5, 20);
g.scale(20.0d,50.0d);
g.rotate(Math.toRadians(-90));
/* marche pas non plus !
AffineTransform tx = new AffineTransform();
tx.rotate(Math.toRadians(-90));
g.setTransform(tx);
*/
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(outputStream);
encoder.encode(outImage);

FileOutputStream fos = new FileOutputStream("essai.jpeg");
fos.write(outputStream.toByteArray());
outputStream.close();
}
catch (IOException e) {
e.printStackTrace();
}


}
public static void main(String[] args) {
CreateImage createImage1 = new CreateImage("Mon texte bidon");
}

}

4 réponses

Avatar
TestMan
Bonjour,

J'ai fait un petit programme qui permet d'ecrire un texte, faire une rotation et en recuperer l'image dans un jpeg.
Maheureusement impossible de lui faire faire la rotation. Tout le reste marche.

Merci pour votre aide.


Pierre


public class CreateImage {
public CreateImage(String texte) {
try
{
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

BufferedImage outImage > new BufferedImage(100,
30,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = outImage.createGraphics();
g.setBackground(Color.white);
g.clearRect(0,0,100,30);
g.setColor(Color.red);
g.drawString(texte, 5, 20);
g.scale(20.0d,50.0d);
g.rotate(Math.toRadians(-90));
/* marche pas non plus !
AffineTransform tx = new AffineTransform();
tx.rotate(Math.toRadians(-90));
g.setTransform(tx);
*/
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(outputStream);
encoder.encode(outImage);

FileOutputStream fos = new FileOutputStream("essai.jpeg");
fos.write(outputStream.toByteArray());
outputStream.close();
}
catch (IOException e) {
e.printStackTrace();
}


}
public static void main(String[] args) {
CreateImage createImage1 = new CreateImage("Mon texte bidon");
}

}


Bonjour,


Le .rotate modifie la matrice de transformation courante, il ne fait pas
tourner ce qui a déjà été "écrit" dans le pipeline graphique de Java2D
(voir la doc de Graphics2D). Essayez de mettre le .rorate au début ...

Pensez à positioner un RenderingHints pour l'interpolation à bilinear si
vous souhaitez un rendu amélioré.

Enfin, essayez également d'utiliser ImageIO qui serra plus générique :

File file = new File("essai.jpeg");
ImageIO.write(outImage,"jpeg",fos);

Bon code...

A+
TM

Avatar
1 connu
Merci TestMan pour les tuyaux.

J'ai essayé de mettre le rotate au debut comme cela :

Graphics2D g = outImage.createGraphics();
g.rotate(Math.toRadians(-90)); // nothing done
g.setBackground(Color.white);
g.clearRect(0,0,300,30);
g.setColor(Color.black);
g.setFont(currentFont);
g.drawString(nom, 5, 20);

mais c'est pire, j'ai une image completement noire et non tournée !

Je piges rien ....


Pierre



"TestMan" a écrit dans le message de news: 45228bb7$0$1485$
Bonjour,

J'ai fait un petit programme qui permet d'ecrire un texte, faire une rotation et en recuperer l'image dans un jpeg.
Maheureusement impossible de lui faire faire la rotation. Tout le reste marche.

Merci pour votre aide.


Pierre


public class CreateImage {
public CreateImage(String texte) {
try
{
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

BufferedImage outImage >> new BufferedImage(100,
30,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = outImage.createGraphics();
g.setBackground(Color.white);
g.clearRect(0,0,100,30);
g.setColor(Color.red);
g.drawString(texte, 5, 20);
g.scale(20.0d,50.0d);
g.rotate(Math.toRadians(-90));
/* marche pas non plus !
AffineTransform tx = new AffineTransform();
tx.rotate(Math.toRadians(-90));
g.setTransform(tx);
*/
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(outputStream);
encoder.encode(outImage);

FileOutputStream fos = new FileOutputStream("essai.jpeg");
fos.write(outputStream.toByteArray());
outputStream.close();
}
catch (IOException e) {
e.printStackTrace();
}


}
public static void main(String[] args) {
CreateImage createImage1 = new CreateImage("Mon texte bidon");
}

}
Bonjour,


Le .rotate modifie la matrice de transformation courante, il ne fait pas tourner ce qui a déjà été "écrit" dans le pipeline
graphique de Java2D (voir la doc de Graphics2D). Essayez de mettre le .rorate au début ...

Pensez à positioner un RenderingHints pour l'interpolation à bilinear si vous souhaitez un rendu amélioré.

Enfin, essayez également d'utiliser ImageIO qui serra plus générique :

File file = new File("essai.jpeg");
ImageIO.write(outImage,"jpeg",fos);

Bon code...

A+
TM



Avatar
TestMan
Merci TestMan pour les tuyaux.

J'ai essayé de mettre le rotate au debut comme cela :

Graphics2D g = outImage.createGraphics();
g.rotate(Math.toRadians(-90)); // nothing done
g.setBackground(Color.white);
g.clearRect(0,0,300,30);
g.setColor(Color.black);
g.setFont(currentFont);
g.drawString(nom, 5, 20);

mais c'est pire, j'ai une image completement noire et non tournée !

Je piges rien ....


Pierre


Bonjour,

Tout le problème déside dans ce que fait le .rotate ... il tourne autour
de 0,0 comme coordonnées, or faire une rotation de -90° autour de 0,0
d'un text affiché en 5,20 provoque l'affichage en dehors de l'image !

D'où le fait que vous ne voyez pas votre texte :)
Idem pour vos zones de "clear" et autre directives ... ainsi, il ne
reste que la couleur par défaut du modele RGB à savoir 000000, qui est
du noir, CQFD :)

Je vous propose de tester avec le code :

public static void main(String[] args) throws Exception{

BufferedImage image = new BufferedImage(30, 100,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
g.setTransform(AffineTransform.getRotateInstance(Math.toRadians(-90),50.d,50.d));
g.setBackground(Color.WHITE);
g.clearRect(0,0,100,30);
g.setColor(Color.RED);
g.drawString("test 123", 5, 20);
g.scale(20.0d,50.0d);

ImageIO.write(image,"jpeg",args[0]);

}

Vous pouvez en plus remplacer "jpeg" par "png" et TYPE_INT_RGB par
TYPE_INT_ARGB et supprimer le clear et la couleur de fond pour obtenir
un effet de transparence alpha automatique...

Java2D n'a que peu de limites ;-)

A+
TM

Avatar
1 connu
Tout le problème déside dans ce que fait le .rotate ... il tourne autour
de 0,0 comme coordonnées, or faire une rotation de -90° autour de 0,0 d'un text affiché en 5,20 provoque l'affichage en dehors de
l'image !


Damned, J'ai pas vu ca !
Merci beaucoup, c'est super !

Pierre