Hello please find below some code I wrote to use the jpeg codec which is a
standard part of the java 1.3 package. There is also batik (svg) code in
there. Hopefully, you'll find this code helpful. 

                                -Brian

-----------------------
Brian Gilman <[EMAIL PROTECTED]>
Sr. Software Engineer MIT/Whitehead Inst. Center for Genome Research
One Kendall Square, Bldg. 300 / Cambridge, MA 02139-1561 USA
phone +1 617  252 1069 / fax +1 617 252 1902


On Sat, 12 Jan 2002, Mark Schreiber wrote:

> Hi I have been meaning to post this for a while, It is some source for a
> logoPainter that I made for an upcomming bioinformatics paper regarding
> the correction for signals in a biased genome.
> 
> It is based on a Biojava-live (although perhaps a slightly earlier
> release so it made need the odd tweak) Anyhow it demonstrates some writing
> to Jpeg Tiff bmp etc. Uses the Java Advanced Image Library (JAI 1.1 from
> Sun). Please feel free to use / review the code as you see fit. Perhaps
> ask permission before selling it ;)
> 
> I would be happy for it to be made part of the CVS if people want. It
> could probably do with some peer review so to speak as it has a few rough
> edges in the code that others might be able to make more elegant.
> 
> Enjoy
> 
> Mark
> 
> 
> 
> On Fri, 11 Jan 2002, Bert Coessens wrote:
> 
> > Dear all,
> > 
> > Does anybody know how to write a graphics object to a jpeg file? I
> > already tried almost everything but still with no result. The code
> > beneath is what I think should work, but if I run it, I only get a black
> > image of 300 by 300. Can anybody tell me what I'm doing wrong?
> > 
> > * variable dist is some distance
> > * sLogo is not a null object, I can visualise it inside a JFrame object
> > 
> > code:
> >     {
> >         DistributionLogo sLogo = new DistributionLogo();
> >         TextLogoPainter logoPainter = new TextLogoPainter();
> >         sLogo.setLogoPainter(logoPainter);
> >         sLogo.setStyle(new DNAStyle());
> >         sLogo.setDistribution(dist);
> > 
> >         BufferedImage bufIm = new BufferedImage(300, 300,
> > BufferedImage.TYPE_INT_RGB);
> >         Graphics g = bufIm.createGraphics();
> >         logoPainter.paintLogo(g, sLogo);
> > 
> >         File outfile = new File("motif.jpeg");
> >         FileOutputStream outstream = new FileOutputStream(outfile);
> >         com.sun.image.codec.jpeg.JPEGImageEncoder encoder =
> > 
> > com.sun.image.codec.jpeg.JPEGCodec.createJPEGEncoder(outstream);
> >         encoder.encode(img);
> >     }
> > 
> > Thanks in advance!!
> > Bert
> > 
> > _______________________________________________
> > Biojava-l mailing list  -  [EMAIL PROTECTED]
> > http://biojava.org/mailman/listinfo/biojava-l
> > 
> 
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> Mark Schreiber                        Ph: 64 3 4797875
> Rm 218                                email [EMAIL PROTECTED]
> Department of Biochemistry
> University of Otago           
> PO Box 56
> Dunedin
> New Zealand
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 
package org.ensembl.draw;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;

/*******************
 * For SVG Generation
 * Added 12/08/01
 *******************/

import org.apache.batik.svggen.*;
import org.apache.batik.dom.*;
import org.w3c.dom.*;
import org.apache.batik.transcoder.*;
import org.apache.batik.transcoder.image.*;
import org.apache.batik.bridge.*;
import org.apache.fop.svg.*;
import org.apache.fop.*;

import com.sun.image.codec.jpeg.*;



/*
 * WHITEHEAD INSTITUTE
 * SOFTWARE COPYRIGHT NOTICE AGREEMENT
 * This software and its documentation are copyright 2001 by the
 * Whitehead Institute for Biomedical Research.  All rights are reserved.
 *
 * This software is supplied without any warranty or guaranteed support
 * whatsoever.  The Whitehead Institute can not be responsible for its
 * use, misuse, or functionality.
 *
 * We would like to thank Ewan Birney and the Ensembl team at the Sanger Centre
 * for providing the original source code which was used as a template for this
 * API and code base.
 *
 *@author John Mayer and the OmniGene team
 */


public class ContigView extends JPanel {

    public ChromPane chromPane;
    public OverviewPane overviewPane;
    public DetailedPane detailedPane;
    int width = 800;
    OmniView appFrame;

    ContigView(OmniView appFrame) {
        this.appFrame = appFrame;
        setLayout(null);
        setBackground(Color.white);
        detailedPane = new DetailedPane(appFrame,this);
        chromPane = new ChromPane(appFrame,this,detailedPane.selPanel);
        overviewPane = new OverviewPane(appFrame,this,detailedPane.selPanel);
        detailedPane.refreshConfig();
        position();

        PopupManager popMan = new PopupManager(this);
        addMouseListener(popMan);
        addMouseMotionListener(popMan);

        JMenuBar mbar = new JMenuBar();
        JMenu fileMenu = new JMenu("File");
        JMenu editMenu = new JMenu("Edit");
        JMenuItem exitItem = new JMenuItem("Exit");
        JMenuItem optionItem = new JMenuItem("Options");
        JMenu exportItem = new JMenu("Export...");
        JMenuItem asSVG = new JMenuItem("As SVG");
        JMenuItem asPDF = new JMenuItem("As PDF");
        JMenuItem asJPEG =new JMenuItem("As JPEG");
        optionItem.addActionListener(new ConfigurationHandler(appFrame, this) );
        asSVG.addActionListener(new ExportHandler(this, "svg"));
        asPDF.addActionListener(new ExportHandler(this,"pdf"));
        asJPEG.addActionListener(new ExportHandler(this,"jpeg"));

        appFrame.setJMenuBar(mbar);
        mbar.add(fileMenu);
        mbar.add(editMenu);
        fileMenu.add(exportItem);
        fileMenu.add(exitItem);
        editMenu.add(optionItem);
        exportItem.add(asSVG);
        exportItem.add(asPDF);
        exportItem.add(asJPEG);

        exitItem.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent ae) {
               System.exit(0);
           }
        });
    }

    void position() {
        Dimension chromDim = chromPane.plannedSize(),
                  overviewDim = overviewPane.plannedSize(),
                  detailedDim = detailedPane.plannedSize();

        int overviewTop = chromDim.height;
        int detailedviewTop = overviewTop+overviewDim.height;
        chromPane.position(0,0,width,chromDim.height);
        overviewPane.position(0,overviewTop,width,overviewDim.height);
        detailedPane.position(0,detailedviewTop,width,detailedDim.height);
    }

    public Pane paneIncludingPoint(int x, int y) {
        Dimension chromDim = chromPane.plannedSize(),
                  overviewDim = overviewPane.plannedSize(),
                  detailedDim = detailedPane.plannedSize();
        int overviewTop = chromDim.height;
        int detailedviewTop = overviewTop+overviewDim.height;
        if (new Rectangle(0,0,width,chromDim.height).contains(x,y))
            return chromPane;
        if (new Rectangle(0,overviewTop,width,overviewDim.height).contains(x,y))
            return overviewPane;
        if (new Rectangle(0,detailedviewTop,width,detailedDim.height).contains(x,y))
            return detailedPane;
        return null;
    }

    BufferedImage bufferImage;

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        if (plannedSize().height == 0) return;
        bufferImage = new BufferedImage(width,plannedSize().height, 
BufferedImage.TYPE_INT_RGB);
        Graphics bufferg = bufferImage.getGraphics();
        super.paintComponent(bufferg);
        chromPane.paint(bufferg);
        overviewPane.paint(bufferg);
        detailedPane.paint(bufferg);
        g.drawImage(bufferImage,0,0,this);
    }

    public Dimension getPreferredSize() {
        return plannedSize();
    }

    Dimension plannedSize() {
        int plannedHeight =
           chromPane.plannedSize().height  +
           overviewPane.plannedSize().height  +
           detailedPane.plannedSize().height;
        return new Dimension(800,plannedHeight);
    }

   public void exportAsSVG() throws IOException, 
UnsupportedEncodingException,FileNotFoundException{

        //Get an instance of a DOM tree to represent the graphics in this pane
        DOMImplementation domImpl = GenericDOMImplementation.getDOMImplementation();

        //Get an instance document
        Document doc = domImpl.createDocument(null, "svg", null);

        //Create an instance of an SVG Generator
        SVGGraphics2D svgGen = new SVGGraphics2D(doc);

        //send the genetator to our paint routine

        this.paintComponent(svgGen);

        //now stream this all out as SVG

        boolean useCSS = true;

        Writer out = new OutputStreamWriter(new FileOutputStream("./Output.svg"), 
"UTF-8");

        svgGen.stream(out,useCSS);

        out.close();
   }

    public void exportAsJPEG() throws   IOException,FileNotFoundException{

        OutputStream out = new FileOutputStream("Output.jpeg");

        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);

        encoder.encode(bufferImage);

        out.flush();
        out.close();

    }


    public void exportAsPDF() throws  IOException, 
UnsupportedEncodingException,FileNotFoundException,TranscoderException{

        //first export this as an SVG
        exportAsSVG();

        //now get in instance of a JPEG transcoder
        PDFTranscoder t = new PDFTranscoder();

        //set some transcoding hints...
        //t.addTranscodingHint(JPEGTranscoder.KEY_QUALITY, new Float(.8));
        //t.addTranscodingHint(JPEGTranscoder.KEY_WIDTH, new Integer(100));

        //get the SVGFile we created
        TranscoderInput input = new TranscoderInput(new 
File("Output.svg").toURL().toString());

        //Create an output
        OutputStream ostream = new FileOutputStream("Output.pdf");
        TranscoderOutput output = new TranscoderOutput(ostream);

        //save the image
        t.transcode(input, output);

        //flush everything down the pipe

        ostream.flush();
        ostream.close();


    }



}

Reply via email to