📄 svgexport.java
字号:
case PNG_FORMAT : extension=".png"; progressBarDialogTitle=pngExportDialog.getExportDialogTitle(); break; case BMP_FORMAT : extension=".bmp"; progressBarDialogTitle=bmpExportDialog.getExportDialogTitle(); break; case TIFF_FORMAT : extension=".tiff"; progressBarDialogTitle=tiffExportDialog.getExportDialogTitle(); break; case PDF_FORMAT : extension=".pdf"; progressBarDialogTitle=pdfExportDialog.getExportDialogTitle(); break; } //handling the path if(! path.endsWith(extension)){ path+=extension; } final String fpath=path; //the progress bar SVGProgressBarDialog pb=null; if(getSVGEditor().getParent() instanceof JFrame){ pb=new SVGProgressBarDialog((JFrame)getSVGEditor().getParent(), progressBarDialogTitle); }else{ pb=new SVGProgressBarDialog(new JFrame(""), progressBarDialogTitle); } final SVGProgressBarDialog progressBar=pb; switch(exportType) { case JPG_FORMAT : res=jpgExportDialog.showExportDialog(frame); if(res==ExportDialog.OK_ACTION){ //initializing the progress bar and showing it progressBar.setIndeterminate(true, true); progressBar.setVisible(true); final double width=jpgExportDialog.getExportSize().x, height=jpgExportDialog.getExportSize().y; final float jpgQuality=jpgExportDialog.getJpgQuality(); final boolean isOptimized=jpgExportDialog.isOptimized(), isProgressive=jpgExportDialog.isProgressive(); //creating the canvas that will be used to generate the pdf new ExportCanvas(frame.getScrollPane().getSVGCanvas().getDocument(), progressBar) { protected void doWhenRenderingDone() { try{ //creating the image that will be written BufferedImage wImage=new BufferedImage((int)width, (int)height, BufferedImage.TYPE_INT_RGB); Graphics2D g2=(Graphics2D)wImage.getGraphics(); //getting the graphics node that will be painted GraphicsNode gn=getGraphicsNode(); //computing the graphics transformation so that the image is scaled to the defined size Dimension canvasSize=getCanvasSize(); gn.setTransform(AffineTransform.getScaleInstance(width/canvasSize.width, height/canvasSize.height)); //painting the image g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); g2.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY); g2.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY); g2.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_DISABLE); g2.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE); g2.setColor(Color.white); g2.fillRect(0, 0, (int)width, (int)height); gn.paint(g2); //creating the IIOImage IIOImage iioImage=new IIOImage(wImage, null, null); Iterator<ImageWriter> it=ImageIO.getImageWritersByMIMEType("image/jpeg"); //getting the image writer ImageWriter w=null; while(it.hasNext()) { w=it.next(); if(w instanceof JPEGImageWriter) { break; } } final ImageWriter writer=w; //setting the parameters for the jpeg transcoding JPEGImageWriteParam params=new JPEGImageWriteParam(Locale.getDefault()); params.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); params.setCompressionQuality(jpgQuality); params.setOptimizeHuffmanTables(isOptimized); if(isProgressive) { params.setProgressiveMode(ImageWriteParam.MODE_DEFAULT); }else { params.setProgressiveMode(ImageWriteParam.MODE_DISABLED); } //writing the image ImageOutputStream out=ImageIO.createImageOutputStream(new File(new URI(fpath))); writer.setOutput(out); //adding the listener to the writer writer.addIIOWriteProgressListener(new IIOWriteProgressListener() { public void imageComplete(ImageWriter wr) { writer.removeIIOWriteProgressListener(this); progressBar.setVisible(false); } public void writeAborted(ImageWriter wr) { writer.removeIIOWriteProgressListener(this); progressBar.setVisible(false); } public void imageProgress(ImageWriter wr, float value) { progressBar.setProgressBarValue(25+3*value/4, 0, 100); if(progressBar.cancelAction()) { writer.abort(); JOptionPane.showMessageDialog( getSVGEditor().getParent(), messageexporterror, labelerror, JOptionPane.WARNING_MESSAGE); } } public void imageStarted(ImageWriter arg0, int arg1) {} public void thumbnailComplete(ImageWriter wr) {} public void thumbnailProgress(ImageWriter wr, float arg1) {} public void thumbnailStarted(ImageWriter wr, int arg1, int arg2) {} }); writer.write(null, iioImage, params); //cleaning up out.flush(); writer.removeAllIIOWriteProgressListeners(); progressBar.setVisible(false); writer.dispose(); out.close(); }catch (Exception ex){ progressBar.setVisible(false); SwingUtilities.invokeLater(new Runnable() { public void run() { JOptionPane.showMessageDialog( getSVGEditor().getParent(), messageexporterror, labelerror, JOptionPane.WARNING_MESSAGE); } }); try{ //removing the file that had to be written new File(new URI(fpath)).delete(); }catch (Exception ex2) {} } } }; } break; case PNG_FORMAT : res=pngExportDialog.showExportDialog(frame); if(res==ExportDialog.OK_ACTION){ //initializing the progress bar and showing it progressBar.setIndeterminate(true, true); progressBar.setVisible(true); final double width=pngExportDialog.getExportSize().x, height=pngExportDialog.getExportSize().y; /*final int imageType=pngExportDialog.getImageType(); final int pngQuality=pngExportDialog.getPngBitDepths();*/ //creating the canvas that will be used to generate the pdf new ExportCanvas(frame.getScrollPane().getSVGCanvas().getDocument(), progressBar) { @Override protected void doWhenRenderingDone() { try{ //creating the image that will be written BufferedImage wImage=new BufferedImage((int)width, (int)height, BufferedImage.TYPE_INT_RGB); Graphics2D g2=(Graphics2D)wImage.getGraphics(); //getting the graphics node that will be painted GraphicsNode gn=getGraphicsNode(); //computing the graphics transformation so that the image is scaled to the defined size Dimension canvasSize=getCanvasSize(); gn.setTransform(AffineTransform.getScaleInstance(width/canvasSize.width, height/canvasSize.height)); //painting the image g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); g2.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY); g2.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY); g2.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_DISABLE); g2.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE); g2.setColor(Color.white); g2.fillRect(0, 0, (int)width, (int)height); gn.paint(g2); //creating the IIOImage IIOImage iioImage=new IIOImage(wImage, null, null); Iterator<ImageWriter> it=ImageIO.getImageWritersByMIMEType("image/png"); ImageWriter w=null; while(it.hasNext()) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -