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图片啊  或者用什么方法可以转换!请教了

解决方案 »

  1.   

    http://blog.csdn.net/chenweionline/archive/2008/01/05/2026855.aspx
      

  2.   

    public class SetDPI4TIFF ...{    private static String METADATA_NAME = "com_sun_media_imageio_plugins_tiff_image_1.0";
        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();
        }
      

  3.   

    最近也在做图片的东西
    给你推荐一个imagemagick
    这个支持命令行,也提供了java的包装类。
    优点:速度快,支持图片格式多
    缺点:要在系统下线安装此程序 不过提供windows linux ...版本
    也是刚刚入门 有兴趣可以一起研究。