BufferedImage image = ImageIO.read(new FileInputStream("c:\\123.jpg"));
Graphics2D Co = image.createGraphics();
Co.setColor(Color.decode("#000000"));
Co.setFont(new Font("华文新魏", Font.BOLD, 32));
Co.drawString("说的很反感的收费空间规划", 200,180);
Co.dispose();
FileOutputStream out = new FileOutputStream("c:\\create1new.jpg");
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(image);
生成的图片只有72dpi 如何生成300以上的dpi图片啊 或者用什么方法可以转换!请教了
private static int DPI_X = 300;
private static int DPI_Y = 300; public static void main(String[] args) throws Throwable ...{
// Create sample image.
RenderedImage image = new BufferedImage(256, 256, BufferedImage.TYPE_3BYTE_BGR); // Get TIFF writer.
Iterator writers = ImageIO.getImageWritersByFormatName("TIFF");
if (writers == null || !writers.hasNext()) ...{
throw new IllegalStateException("No TIFF writers!");
}
ImageWriter writer = (ImageWriter) writers.next(); // Get the default image metadata.
ImageTypeSpecifier imageType = ImageTypeSpecifier.createFromRenderedImage(image);
IIOMetadata imageMetadata = writer.getDefaultImageMetadata(imageType, null); // Set DPI.
String fileName;
String methodology;
if (args.length == 0 || args[0].equalsIgnoreCase("DOM")) ...{
fileName = "dpi_dom.tif";
setDPIViaDOM(imageMetadata);
methodology = "DOM";
} else ...{
fileName = "dpi_api.tif";
imageMetadata = setDPIViaAPI(imageMetadata);
methodology = "API";
} System.out.println(" Writing " + fileName + " using " + methodology + " methodology "); // Write image.
writer.setOutput(new FileImageOutputStream(new File(fileName)));
writer.write(new IIOImage(image, null, imageMetadata));
} /** *//**
* Set DPI using DOM nodes.
*/
private static void setDPIViaDOM(IIOMetadata imageMetadata) throws IIOInvalidTreeException ...{
// Get the DOM tree.
IIOMetadataNode root = (IIOMetadataNode) imageMetadata.getAsTree(METADATA_NAME); // Get the IFD.
IIOMetadataNode ifd = (IIOMetadataNode) root.getElementsByTagName("TIFFIFD").item(0); // Get {X,Y}Resolution tags.
BaselineTIFFTagSet base = BaselineTIFFTagSet.getInstance();
TIFFTag tagXRes = base.getTag(BaselineTIFFTagSet.TAG_X_RESOLUTION);
TIFFTag tagYRes = base.getTag(BaselineTIFFTagSet.TAG_Y_RESOLUTION); // Create {X,Y}Resolution nodes.
IIOMetadataNode nodeXRes = createRationalNode(tagXRes.getName(), tagXRes.getNumber(), DPI_X, 1);
IIOMetadataNode nodeYRes = createRationalNode(tagYRes.getName(), tagYRes.getNumber(), DPI_Y, 1); // Append {X,Y}Resolution nodes to IFD node.
ifd.appendChild(nodeXRes);
ifd.appendChild(nodeYRes); // Set metadata from tree.
imageMetadata.setFromTree(METADATA_NAME, root);
} /** *//**
* Creates a node of TIFF data type RATIONAL.
*/
private static IIOMetadataNode createRationalNode(String tagName, int tagNumber, int numerator, int denominator) ...{
// Create the field node with tag name and number.
IIOMetadataNode field = new IIOMetadataNode("TIFFField");
field.setAttribute("name", tagName);
field.setAttribute("number", "" + tagNumber); // Create the RATIONAL node.
IIOMetadataNode rational = new IIOMetadataNode("TIFFRational");
rational.setAttribute("value", numerator + "/" + denominator); // Create the RATIONAL node and append RATIONAL node.
IIOMetadataNode rationals = new IIOMetadataNode("TIFFRationals");
rationals.appendChild(rational); // Append RATIONALS node to field node.
field.appendChild(rationals); return field;
} /** *//**
* Set DPI using API.
*/
private static IIOMetadata setDPIViaAPI(IIOMetadata imageMetadata) throws IIOInvalidTreeException ...{
// Derive the TIFFDirectory from the metadata.
TIFFDirectory dir = TIFFDirectory.createFromMetadata(imageMetadata); // Get {X,Y}Resolution tags.
BaselineTIFFTagSet base = BaselineTIFFTagSet.getInstance();
TIFFTag tagXRes = base.getTag(BaselineTIFFTagSet.TAG_X_RESOLUTION);
TIFFTag tagYRes = base.getTag(BaselineTIFFTagSet.TAG_Y_RESOLUTION); // Create {X,Y}Resolution fields.
TIFFField fieldXRes = new TIFFField(tagXRes, TIFFTag.TIFF_RATIONAL, 1, new long[][]...{...{DPI_X, 1}});
TIFFField fieldYRes = new TIFFField(tagYRes, TIFFTag.TIFF_RATIONAL, 1, new long[][]...{...{DPI_Y, 1}}); // Append {X,Y}Resolution fields to directory.
dir.addTIFFField(fieldXRes);
dir.addTIFFField(fieldYRes); // Convert to metadata object and return.
return dir.getAsMetadata();
}
给你推荐一个imagemagick
这个支持命令行,也提供了java的包装类。
优点:速度快,支持图片格式多
缺点:要在系统下线安装此程序 不过提供windows linux ...版本
也是刚刚入门 有兴趣可以一起研究。