After tinkering around a bit with the code I recognized
that ToastScript uses com.sun to do JPEG encoding.
After reading this:
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);
Logged In: YES
user_id=1103862
This is in PageCanvas.java
Changes for JPEG encoding
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 ---------