Menu

#3 Use of com.sun not recommended...

open-fixed
nobody
None
5
2005-08-27
2005-08-25
Anonymous
No

After tinkering around a bit with the code I recognized
that ToastScript uses com.sun to do JPEG encoding.
After reading this:

http://developer.classpath.org/mediation/ClasspathMigration#head-d4ee9efe53a641e29ffdcd96e985bf38bbc671c1

I found it could be done differently so as to support
users with a proprietary Java VM who are not using the
Sun Java VM.

Suggest instead of the following:
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

This be used:
import javax.imageio.*;
import javax.imageio.plugins.jpeg.*;
import javax.imageio.metadata.*;
import javax.imageio.stream.*;

And later instead of:
JPEGImageEncoder encoder =
JPEGCodec.createJPEGEncoder(stream);
encoder.encode(image);

Use:
ImageWriter encoder =
(ImageWriter)ImageIO.getImageWritersByFormatName("JPEG").next();
JPEGImageWriteParam param = new
JPEGImageWriteParam(null);
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality(90);
encoder.write((IIOMetadata) null, new
IIOImage(image,null,null), param);

Discussion

  • Anonymous

    Anonymous - 2005-08-25

    Logged In: YES
    user_id=1103862

    This is in PageCanvas.java

     
  • softhub

    softhub - 2005-08-27

    Changes for JPEG encoding

     
  • softhub

    softhub - 2005-08-27
    • status: open --> open-fixed
     
  • Anonymous

    Anonymous - 2005-08-28

    Logged In: YES
    user_id=1103862

    The above fix is not all that is neccessary:. I have
    attached a diff to this message to resolve this issue and a
    prior one mentioned about Scaling:

    --------- BEGIN fixes.diff ---------
    --- OLD/toastscript/src/com/softhub/ts/PageCanvas.java
    2005-08-28 13:17:23.000000000 -0500
    +++ toastscript/src/com/softhub/ts/PageCanvas.java
    2005-08-28 13:17:34.000000000 -0500
    @@ -29,11 +29,15 @@
    import java.awt.geom.AffineTransform;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    -import java.io.OutputStream;
    +import javax.imageio.IIOImage;
    +import javax.imageio.ImageIO;
    +import javax.imageio.ImageWriteParam;
    +import javax.imageio.ImageWriter;
    +import javax.imageio.metadata.IIOMetadata;
    +import javax.imageio.plugins.jpeg.JPEGImageWriteParam;
    +import javax.imageio.stream.FileImageOutputStream;
    import javax.swing.JPanel;
    import com.softhub.ps.graphics.Drawable;
    -import com.sun.image.codec.jpeg.JPEGCodec;
    -import com.sun.image.codec.jpeg.JPEGImageEncoder;

    public class PageCanvas extends JPanel {

    @@ -120,7 +124,7 @@
    }
    }

    - public void save(OutputStream stream, String format)
    throws IOException {
    + public void save(FileImageOutputStream stream,
    String format) throws IOException {
    BufferedImage image =
    createImage(BufferedImage.TYPE_INT_RGB);
    Graphics2D g = image.createGraphics();
    Dimension d = getSize();
    @@ -130,8 +134,12 @@
    draw(g);
    g.dispose();
    if (format.equals("jpeg")) {
    - JPEGImageEncoder encoder =
    JPEGCodec.createJPEGEncoder(stream);
    - encoder.encode(image);
    + ImageWriter encoder =
    (ImageWriter)ImageIO.getImageWritersByFormatName("JPEG").next();
    + JPEGImageWriteParam param = new
    JPEGImageWriteParam(null);
    +
    param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
    + param.setCompressionQuality(0.9f);
    + encoder.setOutput(stream);
    + encoder.write((IIOMetadata) null,
    new IIOImage(image,null,null), param);
    } else {
    throw new RuntimeException(format +
    " not supported");
    }
    --- OLD/toastscript/src/com/softhub/ts/PostScriptPane.java
    2005-08-28 13:17:23.000000000 -0500
    +++ toastscript/src/com/softhub/ts/PostScriptPane.java
    2005-08-28 13:17:34.000000000 -0500
    @@ -21,16 +21,27 @@
    * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA
    */

    -import java.awt.*;
    +import java.awt.Cursor;
    +import java.awt.Dimension;
    +import java.awt.Graphics;
    +import java.awt.Point;
    +import java.awt.Rectangle;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    -import java.awt.print.*;
    +import java.awt.print.PageFormat;
    +import java.awt.print.Pageable;
    +import java.awt.print.Paper;
    +import java.awt.print.Printable;
    +import java.awt.print.PrinterException;
    +import java.awt.print.PrinterJob;
    import java.io.File;
    -import java.io.OutputStream;
    import java.io.IOException;
    import java.util.Enumeration;
    import java.util.Vector;
    +
    +import javax.imageio.stream.FileImageOutputStream;
    import javax.swing.JPanel;
    +
    import com.softhub.ps.Interpreter;
    import com.softhub.ps.device.DefaultPageDevice;
    import com.softhub.ps.device.PageDevice;
    @@ -232,7 +243,7 @@
    }
    }

    - public void save(OutputStream stream, String format)
    throws IOException {
    + public void save(FileImageOutputStream stream,
    String format) throws IOException {
    PagePane pagePane = getCurrentPage();
    PageCanvas canvas = pagePane.getPageCanvas();
    canvas.save(stream, format);
    @@ -340,6 +351,8 @@
    PagePane pagePane = (PagePane)
    e.nextElement();
    pagePane.updatePageScale(scale);
    }
    + doLayout();
    + fireViewResizeEvent();
    validate();
    }

    --- OLD/toastscript/src/com/softhub/ts/ViewFrame.java
    2005-08-28 13:17:23.000000000 -0500
    +++ toastscript/src/com/softhub/ts/ViewFrame.java
    2005-08-28 13:17:34.000000000 -0500
    @@ -21,11 +21,33 @@
    * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA
    */

    +import java.awt.AWTEvent;
    +import java.awt.BorderLayout;
    +import java.awt.Container;
    +import java.awt.Dimension;
    +import java.awt.FlowLayout;
    +import java.awt.Insets;
    +import java.awt.Point;
    +import java.awt.Toolkit;
    +import java.awt.event.ActionEvent;
    +import java.awt.event.ActionListener;
    +import java.awt.event.WindowEvent;
    +import java.io.File;
    +import java.io.IOException;
    +import javax.imageio.stream.FileImageOutputStream;
    +import javax.swing.BorderFactory;
    +import javax.swing.ImageIcon;
    +import javax.swing.JButton;
    +import javax.swing.JDialog;
    +import javax.swing.JFileChooser;
    +import javax.swing.JFrame;
    +import javax.swing.JLabel;
    +import javax.swing.JMenu;
    +import javax.swing.JMenuBar;
    +import javax.swing.JMenuItem;
    +import javax.swing.JPanel;
    +import javax.swing.JToolBar;
    import com.softhub.ps.util.Console;
    -import java.awt.*;
    -import java.awt.event.*;
    -import java.io.*;
    -import javax.swing.*;

    public class ViewFrame extends JFrame {

    @@ -460,9 +482,9 @@
    postDialog(alert);
    }
    profile.setString("file",
    file.getPath());
    - FileOutputStream stream = null;
    + FileImageOutputStream stream = null;
    try {
    - stream = new
    FileOutputStream(file);
    + stream = new
    FileImageOutputStream(file);

    getPostScriptPane().save(stream, "jpeg");
    } catch (IOException ex) {
    System.err.println("export
    failed: " + ex);
    --------- END fixes.diff ---------

     

Log in to post a comment.

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.