1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
|
import java.awt.Rectangle;
import java.awt.Graphics2D;
import java.awt.Color;
import java.io.Writer;
import java.io.OutputStreamWriter;
import java.io.IOException;
import java.awt.*; import java.awt.event.*; import java.net.*; import java.io.*; import java.applet.*; import javax.swing.*;
import org.apache.batik.ext.awt.g2d.AbstractGraphics2D;
import org.apache.batik.svggen.SVGGraphics2D;
import org.apache.batik.dom.GenericDOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.DOMImplementation;
import org.apache.batik.dom.svg.SVGDOMImplementation;
import org.w3c.dom.*;
import org.w3c.dom.svg.*;
public class ImageGenerator{
public static void main(String[] args) {
ImageGenerator ig = new ImageGenerator();
try {
ig.generateImage("GLOBAL LOGISTICS PROVIDER", "/homepage.png", "Neo Sans", null, "0e0e0e", "40", "", "", "700");
} catch (Exception e) {
e.printStackTrace();
}
}
/*JAVA*/
private static String C_MODULE_NAME = "ImageGenerator";
public void generateRolloverImages(String text, String rubriqueName) throws Exception {
int defaultWidth = 170;
generateImage(text, "/"+rubriqueName+"_off.png", "Neo Sans", null, "7F7F7F", "12", null, null, ""+defaultWidth);
generateImage(text, "/"+rubriqueName+"_on.png", "Neo Sans", null, "1D4C92" , "12", null, null, ""+defaultWidth );
}
public void generateImage(String text, String fileLocation, String fontName,String bgColorStr, String txtColorStr, String fontSizeStr, String fontStyleStr, String heightStr, String widthStr) throws Exception {
java.awt.Color bgColor = null;
java.awt.Color txtColor = java.awt.Color.BLACK;
int fontStyle = java.awt.Font.PLAIN;
int height = -1;
int width = -1;
int fontSize = 12;
if (fileLocation == null || fileLocation.length() == 0){
System.out.println("erreur");
//wsnoheto.error.CTErreur.DeclencherException(C_MODULE_NAME, "generateImage",null);
}
//wsnoheto.error.CTErreur.DeclencherException(C_MODULE_NAME, C_METHOD_NAME, t);
if (text == null) text = "";
if (fontName == null || fontName.length() == 0) fontName = "Serif";
if (bgColorStr != null && bgColorStr.length() > 0) bgColor = new java.awt.Color(Integer.parseInt(bgColorStr, 16));
if (txtColorStr != null && txtColorStr.length() > 0) txtColor = new java.awt.Color(Integer.parseInt(txtColorStr, 16));
if (heightStr != null && heightStr.length() > 0) height = Integer.parseInt(heightStr);
if (widthStr != null && widthStr.length() > 0) width = Integer.parseInt(widthStr);
if (fontSizeStr != null && fontSizeStr.length() > 0) fontSize = Integer.parseInt(fontSizeStr);
if (fontSize <= 0) fontSize = 12;
if (fontStyleStr != null) {
String[] paramFontStyles = fontStyleStr.split("\\+");
for (int i = 0; i < paramFontStyles.length; i++) {
if (paramFontStyles[i].compareToIgnoreCase("BOLD") == 0) fontStyle += java.awt.Font.BOLD;
if (paramFontStyles[i].compareToIgnoreCase("ITALIC") == 0) fontStyle += java.awt.Font.ITALIC;
}
}
generateImage(text, fileLocation, fontName, bgColor, txtColor, fontSize, fontStyle, height, width);
}
public void generatePj(String textField, String imageField, String fontName,String bgColorStr, String txtColorStr, String fontSizeStr, String fontStyleStr, String heightStr, String widthStr) throws Throwable {
StringBuilder imgRoot = new StringBuilder().append("image").append(java.io.File.separator).append("toto").append(java.io.File.separator);
StringBuilder imgPath = new StringBuilder().append("pj").append(java.io.File.separator).append(textField).append("12").append(".png");
String imgLocation = imgRoot.toString() + imgPath.toString();
System.out.println( "imgLocation " + imgLocation );
generateImage(textField, imgLocation, fontName, bgColorStr, txtColorStr, fontSizeStr, fontStyleStr, heightStr, widthStr);
imageField=imgPath.toString().replace('\\', '/');
}
protected void generateImage(String text, String imageLocation, String fontName, java.awt.Color bgColor, java.awt.Color txtColor, int fontSize, int fontStyle, int height, int width) throws Exception {
org.w3c.dom.Document document = org.apache.batik.dom.GenericDOMImplementation.getDOMImplementation().createDocument(org.apache.batik.dom.svg.SVGDOMImplementation.SVG_NAMESPACE_URI,"svg", null);
org.apache.batik.svggen.SVGGraphics2D svgGenerator = new org.apache.batik.svggen.SVGGraphics2D(document);
svgGenerator.setPaint(bgColor);
//svgGenerator.setBackground(bgColor);
if (bgColor != null) svgGenerator.fill(new java.awt.Rectangle(0, 0, width, height));
svgGenerator.setPaint(txtColor);
java.awt.Font curFont = new java.awt.Font(fontName, fontStyle, fontSize);
svgGenerator.setFont(curFont);
double maxWidth = 0;
float sx = 0;
float sy = 0;
if (text.length() > 0){
text = new String(text);
String[] curLines = text.split("\n");
for (int i = 0; i < curLines.length; i++){
String curLine = curLines[i];
int sstartchar = 0;
java.text.AttributedString sas = new java.text.AttributedString(curLine);
sas.addAttribute(java.awt.font.TextAttribute.FONT, curFont);
java.text.AttributedCharacterIterator saci = sas.getIterator();
java.awt.font.FontRenderContext sfrc = svgGenerator.getFontRenderContext();
java.awt.font.LineBreakMeasurer slbm = new java.awt.font.LineBreakMeasurer(saci, sfrc);
while (slbm.getPosition() < saci.getEndIndex()) {
java.awt.font.TextLayout stextLayout = slbm.nextLayout(width);
double curWidth = stextLayout.getBounds().getWidth();
if (curWidth > maxWidth) maxWidth = curWidth;
sy += stextLayout.getAscent();
svgGenerator.drawString(curLine.substring(sstartchar, slbm.getPosition()), sx, sy);
sstartchar = slbm.getPosition();
sy += stextLayout.getDescent() + stextLayout.getLeading();
sx = 0;
}
}
}
if (height < 0) height = Math.round(sy + 0.5f);
width = new Long(Math.round(maxWidth + 1.5f)).intValue();
svgGenerator.setSVGCanvasSize(new java.awt.Dimension(width, height));
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream(8192);
java.io.Writer svgOutput = new java.io.OutputStreamWriter(baos, java.nio.charset.Charset.forName(System.getProperty("file.encoding"))); //"ISO-8859-15"
svgGenerator.stream(svgOutput, true);
// Create the transcoder input.
org.apache.batik.transcoder.TranscoderInput input = new org.apache.batik.transcoder.TranscoderInput(new java.io.StringReader(baos.toString()));
// Create the transcoder output.
java.io.OutputStream ostream = null;
String absimageLocation = imageLocation;
System.out.println(absimageLocation);
java.io.File file = new java.io.File(absimageLocation);
new java.io.File(file.getParent()).mkdirs();
ostream = new java.io.FileOutputStream(absimageLocation);
org.apache.batik.transcoder.TranscoderOutput output = new org.apache.batik.transcoder.TranscoderOutput(ostream);
//org.apache.batik.transcoder.image.JPEGTranscoder transcoder = new org.apache.batik.transcoder.image.JPEGTranscoder();
//transcoder.addTranscodingHint(JPEGTranscoder.KEY_QUALITY,new Float(.1));
org.apache.batik.transcoder.image.PNGTranscoder transcoder = new org.apache.batik.transcoder.image.PNGTranscoder();
transcoder.transcode(input, output);
ostream.flush();
ostream.close();
}
} |
Partager