java的js截圖,java截圖代碼

本文目錄一覽:

js 如何調整圖片大小(調整寬或高、再截取其中部分),並後台java保存調整截取後的圖片?

你說的這種最好用flash 實現,首先js截圖不現實,好多瀏覽器都不行。

如果一定要用js的話,只能是先設置要截圖的位置坐標,然後把要截取的位置信息坐標傳給java,java後台根據位置坐標截取。我做的那個頭像上傳的差價都是用flash做的。

java截屏有哪幾種方法

前台方式

1. 利用html2canvas實現前台截屏

html2canvas項目的gitHub地址

html2canvas示例

html2canvas可以將HTML代碼塊進行截取,並生成快照形式的canvas,然後可以利用html5的下載功能提供圖片的下載接口,供用戶下載。

優點:前台技術,實現比較容易。

缺點:此項目使用了html5的技術,因此在對IE的兼容上,只可以在IE9+的版本上使用。

使用時,需要引用jQuery.js和html2canvas.js。(html2canvas.js可以在github上下載)

具體JavaScript代碼如下:

var canvas = function () {

html2canvas($(“#chart”), {

onrendered: function (canvas) {

$(“#class11”).html(canvas);//將id為「class11」部分的代碼轉換為canvas

var type = ‘png’;//圖片類型為png

var imgData = canvas.toDataURL(‘png’);//將圖片轉換為png類型的流

var _fixType = function (type) {

type = type.toLowerCase().replace(/jpg/i, ‘jpeg’); var r = type.match(/png|jpeg|bmp|gif/)[0]; return ‘image/’ + r;

}; var saveFile = function (data, filename) {

var save_link = document.createElementNS(”, ‘a’);

save_link.href = data;

save_link.download = filename; var event = document.createEvent(‘MouseEvents’);

event.initMouseEvent(‘click’, true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);

save_link.dispatchEvent(event);

}; //下載時的文件名

var filename = ‘baidufe_’ + (new Date()).getTime() + ‘.’ + type; // 下載文件

saveFile(imgData, filename);

}

});

後台方式(java)

1. 利用html2image實現

html2image的地址(google)

html2image是可以識別html標籤並將html轉換成圖片的java項目。

優點:後台轉換,故對瀏覽器的版本基本沒有要求。

缺點:對樣式的識別不是很好,轉換出來的圖片比較簡單,基本沒有可以兼容的樣式。

使用方式:maven中引用如下依賴:

dependency

groupIdcom.github.xuwei-k/groupId

artifactIdhtml2image/artifactId

version0.1.0/version/dependency12345

2. 利用DJNativeSwing項目實現

純java代碼實現。使用DJNativeSwing這個項目,構建一個swing瀏覽器,打開網址,之後截取圖片。(需要eclipse的swt庫支持)

優點:純java實現。

缺點:需要多線程的支持,只在控制台方式實現過(由於本人對於多線程的掌握較弱,目前沒有在spring項目中實現這個方法,求大神指導~~)

3. 利用phantomJs實現

phantomJs的GitHub地址

phantomJs官網

phantom利用的是webKit內核,全面支持web而不需瀏覽器支持,快速,原生支持各種Web標準。

優點:速度快,使用簡單。

缺點:需要在項目的服務器端引用exe文件進行截圖,並發性能有待考證。

如何以Java實現網頁截圖技術

1、最直接的方式——使用Robot

方法詳解:該方法利用Robat提供的強大桌面操作能力,硬性調用瀏覽器打開指定網頁,並將網頁信息保存到本地。

優勢:簡單易用,不需要任何第三方插件。

缺點:不能同時處理大量數據,技術含量過低,屬於應急型技巧。

實現方法:使用如下代碼即可。

[java] view plaincopy

public static void main(String[] args) throws MalformedURLException,

IOException, URISyntaxException, AWTException {

//此方法僅適用於JdK1.6及以上版本

Desktop.getDesktop().browse(

new URL(“google.com/intl/en/”).toURI());

Robot robot = new Robot();

robot.delay(10000);

Dimension d = new Dimension(Toolkit.getDefaultToolkit().getScreenSize());

int width = (int) d.getWidth();

int height = (int) d.getHeight();

//最大化瀏覽器

robot.keyRelease(KeyEvent.VK_F11);

robot.delay(2000);

Image image = robot.createScreenCapture(new Rectangle(0, 0, width,

height));

BufferedImage bi = new BufferedImage(width, height,

BufferedImage.TYPE_INT_RGB);

Graphics g = bi.createGraphics();

g.drawImage(image, 0, 0, width, height, null);

//保存圖片

ImageIO.write(bi, “jpg”, new File(“google.jpg”));

}

2、最常規的方式——利用JNI,調用第三方C/C++組件

方法詳解:目前來講,Java領域對於網頁截圖組件的開發明顯不足(商機?),當您需要完成此種操作時,算得上碰到了Java的軟肋。但是,眾所周知Java也擁有強大的JNI能力,可以輕易將C/C++開發的同類組件引為己用。

優勢:實現簡單,只需要封裝對應的DLL文件,就可以讓Java實現同類功能。

劣勢:同其他JNI實現一樣,在跨平台時存在隱患,而且您的程序將不再屬於純Java應用。

實現方法:可參見此用例,具體封裝何種C/C++組件請自行選擇。

PS:示例來源於ACA HTML to Image Converter項目(.acasystems.com/en/web-thumb-activex/faq-convert-html-to-image-in-java.htm ),這是一個收費的HTML轉Image第三方組件,但封裝方式在Java中大同小異。

引用JNI封裝:

[java] view plaincopy

import sun.awt.*;

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

import java.awt.*;

import java.awt.peer.*;

public class Snap

{

static

{

System.loadLibrary(“Snap”);

}

public static void main( String[] argv )

{

Snap t_xSnap = new Snap();

t_xSnap.Start(“google.com”, “snapshot-google.png”);

}

public native void Start(String pi_strURL, String pi_strImageName);

}

CPP部分的實現:

[java] view plaincopy

#include windows.h

#include atlbase.h

#include “snap.h”

#pragma comment(lib,”atl.lib”)

#import “./../../acawebthumb.dll” no_namespace

JNIEXPORT void JNICALL Java_Snap_Start(JNIEnv *pEnv, jobject, jstring pi_strUrl, jstring pi_strFileName)

{

CoInitialize(0);

_bstr_t t_strUrl = pEnv-GetStringUTFChars(pi_strUrl, 0);

_bstr_t t_strFileName = pEnv-GetStringUTFChars(pi_strFileName, 0);

IThumbMakerPtr HTML_Converter = NULL;

HRESULT hr = HTML_Converter.CreateInstance(L”ACAWebThumb.ThumbMaker”);

if (SUCCEEDED(hr))

{

HTML_Converter-SetURL(t_strUrl);

if ( 0 == HTML_Converter-StartSnap() )

HTML_Converter-SaveImage(t_strFileName);

}

if (HTML_Converter)

HTML_Converter.Release();

CoUninitialize();

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/271936.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-17 00:07
下一篇 2024-12-17 00:07

相關推薦

  • JS Proxy(array)用法介紹

    JS Proxy(array)可以說是ES6中非常重要的一個特性,它可以代理一個數組,監聽數據變化並進行攔截、處理。在實際開發中,使用Proxy(array)可以方便地實現數據的監…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Python字符串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字符串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字符串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變量和數…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發佈。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29

發表回復

登錄後才能評論