• JAVA实现网页快照,存为图片格式


    原文:http://blog.csdn.net/java2000_net/article/details/3643528

    截取的google的效果,将就吧,不是特别好。 但是作为普通的应用,我想这个效果我已经很满意了。
    注意,里面的 
    this.setVisible(true);
    这句话如果运行在一些不能显示图形界面的机器上,请屏蔽掉它,不过这样的话,网页里的图片就不能被截取了。


    效果图:



    完整的源代码如下:

    import java.awt.Graphics2D;
    import java.awt.RenderingHints;
    import java.awt.geom.AffineTransform;
    import java.awt.image.BufferedImage;
    import java.awt.image.ColorModel;
    import java.awt.image.WritableRaster;
    import java.io.*;
    import javax.imageio.*;
    import javax.swing.*;
    
    /**
     * HTML2JPG,HTML页面转图片的实现方法。
     * 
     * @author 老紫竹(Java世纪网,java2000.net)
     */
    public class Test extends JFrame {
    
      public Test(String url, File file) throws Exception {
        JEditorPane editorPane = new JEditorPane();
        editorPane.setEditable(false);
        editorPane.setPage(url);
        JScrollPane jsp = new JScrollPane(editorPane);
        getContentPane().add(jsp);
        this.setLocation(0, 0);
        this.setVisible(true); // 如果这里不设置可见,则里面的图片等无法截取
        
        // 如果不延时,则图片等可能没有时间下载显示
        // 具体的秒数需要根据网速等调整
        Thread.sleep(5 * 1000);
    
        setSize(10000, 10000);
    
        pack();
        // BufferedImage image = new BufferedImage(editorPane.getWidth(),
        // editorPane.getHeight(), BufferedImage.TYPE_INT_RGB);
        BufferedImage image = new BufferedImage(editorPane.getWidth(), editorPane.getHeight(),
            BufferedImage.TYPE_INT_RGB);
        Graphics2D graphics2D = image.createGraphics();
        editorPane.paint(graphics2D);
        
        BufferedImage image1 = resize(image, 600, 400);
    
        ImageIO.write(image1, "jpg", file);
        dispose();
      }
    
      public static void main(String[] args) throws Exception {
        new Test("http://www.google.cn", new File("d:/file.jpg"));
      }
    
      public static BufferedImage resize(BufferedImage source, int targetW, int targetH) {
        // targetW,targetH分别表示目标长和宽
        int type = source.getType();
        BufferedImage target = null;
        double sx = (double) targetW / source.getWidth();
        double sy = (double) targetH / source.getHeight();
        // 这里想实现在targetW,targetH范围内实现等比缩放。如果不需要等比缩放
        // 则将下面的if else语句注释即可
        if (sx > sy) {
          sx = sy;
          targetW = (int) (sx * source.getWidth());
          // } else {
          // sy = sx;
          // targetH = (int) (sy * source.getHeight());
        }
        if (type == BufferedImage.TYPE_CUSTOM) { // handmade
          ColorModel cm = source.getColorModel();
          WritableRaster raster = cm.createCompatibleWritableRaster(targetW, targetH);
          boolean alphaPremultiplied = cm.isAlphaPremultiplied();
          target = new BufferedImage(cm, raster, alphaPremultiplied, null);
        } else
          target = new BufferedImage(targetW, targetH, type);
        Graphics2D g = target.createGraphics();
        // smoother than exlax:
        g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
        g.drawRenderedImage(source, AffineTransform.getScaleInstance(sx, sy));
        g.dispose();
        return target;
      }
    }
  • 相关阅读:
    linux+apache+nginx实现,反向代理动静分离
    apache编译安装php后需要注意以下配置
    nginx的gzip压缩功能
    linux+nginx+mysql+php环境下,安装ecshop
    LeetCode 328:奇偶链表 Odd Even Linked List
    LeetCode 160: 相交链表 Intersection of Two Linked Lists
    LeetCode 203:移除链表元素 Remove LinkedList Elements
    LeetCode 142:环形链表 II Linked List Cycle II
    LeetCode 141:环形链表 Linked List Cycle
    围观微博网友发起的美胸比赛学习爬取微博评论内容
  • 原文地址:https://www.cnblogs.com/shihaiming/p/6110022.html
Copyright © 2020-2023  润新知