Java 文字轉(zhuǎn)圖片輸出,Java 輸出透明背景圖片唠粥,Java文字轉(zhuǎn)圖片防爬蟲

最近部分頁面數(shù)據(jù)被爬蟲瘋狂的使用疏魏,主要就是采用動(dòng)態(tài)代理IP爬取數(shù)據(jù)停做,主要是不控制頻率晤愧,這個(gè)最惡心。因?yàn)閷?duì)方是采用動(dòng)態(tài)代理的方式蛉腌,所以沒什么特別好的防止方式官份。

具體防止抓取數(shù)據(jù)方案大全,下篇博客我會(huì)做一些講解烙丛。本篇也是防爬蟲的一個(gè)方案舅巷。就是部分核心文字采用圖片輸出。加大數(shù)據(jù)抓取方的成本河咽。

圖片輸出需求

上圖紅色圈起來的數(shù)據(jù)為圖片輸出了備案號(hào)钠右,就是要達(dá)到這個(gè)效果,如果數(shù)據(jù)抓取方要繼續(xù)使用忘蟹,必須做圖片解析飒房,成本和難度都加到了。也就是我們達(dá)到的效果了媚值。

Java代碼實(shí)現(xiàn)

import javax.imageio.ImageIO;

import java.awt.*;

import java.awt.font.FontRenderContext;

import java.awt.geom.AffineTransform;

import java.awt.geom.Rectangle2D;

import java.awt.image.BufferedImage;

import java.io.File;

import java.nio.file.Paths;

public class ImageDemo {

? ? public static void main(String[] args) throws Exception {

? ? ? ? System.out.println(System.currentTimeMillis());

? ? ? ? //輸出目錄

? ? ? ? String rootPath = "/Users/sojson/Downloads/";

? ? ? ? //這里文字的size狠毯,建議設(shè)置大一點(diǎn),其實(shí)就是像素會(huì)高一點(diǎn)褥芒,然后縮放后嚼松,效果會(huì)好點(diǎn),最好是你實(shí)際輸出的倍數(shù),然后縮放的時(shí)候献酗,直接按倍數(shù)縮放即可寝受。

? ? ? ? Font font = new Font("微軟雅黑", Font.PLAIN, 130);

? ? ? ? createImage("https://www.sojson.com", font, Paths.get(rootPath, "sojson-image.png").toFile());

? ? }

? ? private static int[] getWidthAndHeight(String text, Font font) {

? ? ? ? Rectangle2D r = font.getStringBounds(text, new FontRenderContext(

? ? ? ? ? ? ? ? AffineTransform.getScaleInstance(1, 1), false, false));

? ? ? ? int unitHeight = (int) Math.floor(r.getHeight());//

? ? ? ? // 獲取整個(gè)str用了font樣式的寬度這里用四舍五入后+1保證寬度絕對(duì)能容納這個(gè)字符串作為圖片的寬度

? ? ? ? int width = (int) Math.round(r.getWidth()) + 1;

? ? ? ? // 把單個(gè)字符的高度+3保證高度絕對(duì)能容納字符串作為圖片的高度

? ? ? ? int height = unitHeight + 3;

? ? ? ? return new int[]{width, height};

? ? }

? ? // 根據(jù)str,font的樣式以及輸出文件目錄

? ? public static void createImage(String text, Font font, File outFile)

? ? ? ? ? ? throws Exception {

? ? ? ? // 獲取font的樣式應(yīng)用在輸出內(nèi)容上整個(gè)的寬高

? ? ? ? int[] arr = getWidthAndHeight(text, font);

? ? ? ? int width = arr[0];

? ? ? ? int height = arr[1];

? ? ? ? // 創(chuàng)建圖片

? ? ? ? BufferedImage image = new BufferedImage(width, height,

? ? ? ? ? ? ? ? BufferedImage.TYPE_INT_BGR);//創(chuàng)建圖片畫布

? ? ? ? //透明背景? the begin

? ? ? ? Graphics2D g = image.createGraphics();

? ? ? ? image = g.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);

? ? ? ? g=image.createGraphics();

? ? ? ? //透明背景? the end

? ? ? ? /**

? ? ? ? ? ? 如果你需要白色背景或者其他顏色背景可以直接這么設(shè)置,其實(shí)就是滿屏輸出的顏色

? ? ? ? ? ? 我這里上面設(shè)置了透明顏色罕偎,這里就不用了

? ? ? ? */

? ? ? ? //g.setColor(Color.WHITE);

? ? ? ? //畫出矩形區(qū)域羡蛾,以便于在矩形區(qū)域內(nèi)寫入文字

? ? ? ? g.fillRect(0, 0, width, height);

? ? ? ? /**

? ? ? ? * 文字顏色,這里支持RGB锨亏。new Color("red", "green", "blue", "alpha");

? ? ? ? * alpha 我沒用好痴怨,有用好的同學(xué)可以在下面留言,我開始想用這個(gè)直接輸出透明背景色器予,

? ? ? ? * 然后輸出文字浪藻,達(dá)到透明背景效果,最后選擇了乾翔,createCompatibleImage Transparency.TRANSLUCENT來創(chuàng)建爱葵。

? ? ? ? * android 用戶有直接的背景色設(shè)置,Color.TRANSPARENT 可以看下源碼參數(shù)反浓。對(duì)alpha的設(shè)置

? ? ? ? */

? ? ? ? g.setColor(Color.gray);

? ? ? ? // 設(shè)置畫筆字體

? ? ? ? g.setFont(font);

? ? ? ? // 畫出一行字符串

? ? ? ? g.drawString(text, 0, font.getSize());

? ? ? ? // 畫出第二行字符串萌丈,注意y軸坐標(biāo)需要變動(dòng)

? ? ? ? g.drawString(text, 0, 2 * font.getSize());

? ? ? ? //執(zhí)行處理

? ? ? ? g.dispose();

? ? ? ? // 輸出png圖片,formatName 對(duì)應(yīng)圖片的格式

? ? ? ? ImageIO.write(image, "png", outFile);

? ? }

}

輸出圖片效果:

當(dāng)然我這里是做了放縮雷则,要不然效果沒那么好辆雾。

注意點(diǎn):

其實(shí)代碼里注釋說的已經(jīng)比較清楚了。主要設(shè)置透明色這里月劈。

//透明背景? the begin

Graphics2D g = image.createGraphics();

image = g.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);

g=image.createGraphics();

//透明背景? the end

Android 參考的顏色值

android.graphics.Color 包含顏色值

Color.BLACK ? ? ? ? ? 黑色

Color.BLUE ? ? ? ? ? ?藍(lán)色

Color.CYAN ? ? ? ? ? ?青綠色

Color.DKGRAY ? ? ? ? ?灰黑色

Color.GRAY ? ? ? ? ? ?灰色

Color.GREEN ? ? ? ? ? 綠色

Color.LTGRAY ? ? ? ? ?淺灰色

Color.MAGENTA ? ? ? ? 紅紫色

Color.RED ? ? ? ? ? ? 紅色

Color.TRANSPARENT ? ? 透明

Color.WHITE ? ? ? ? ? 白色

Color.YELLOW ? ? ? ? ?黃色



版權(quán)所屬:SO JSON在線解析

原文地址:https://www.sojson.com/blog/321.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末度迂,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子猜揪,更是在濱河造成了極大的恐慌惭墓,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,599評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件而姐,死亡現(xiàn)場(chǎng)離奇詭異腊凶,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)拴念,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門钧萍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人丈莺,你說我怎么就攤上這事划煮。” “怎么了缔俄?”我有些...
    開封第一講書人閱讀 158,084評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵弛秋,是天一觀的道長(zhǎng)器躏。 經(jīng)常有香客問我,道長(zhǎng)蟹略,這世上最難降的妖魔是什么登失? 我笑而不...
    開封第一講書人閱讀 56,708評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮挖炬,結(jié)果婚禮上揽浙,老公的妹妹穿的比我還像新娘。我一直安慰自己意敛,他們只是感情好馅巷,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,813評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著草姻,像睡著了一般钓猬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上撩独,一...
    開封第一講書人閱讀 50,021評(píng)論 1 291
  • 那天敞曹,我揣著相機(jī)與錄音,去河邊找鬼综膀。 笑死澳迫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的剧劝。 我是一名探鬼主播橄登,決...
    沈念sama閱讀 39,120評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼担平!你這毒婦竟也來了示绊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,866評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤暂论,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后拌禾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體取胎,經(jīng)...
    沈念sama閱讀 44,308評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,633評(píng)論 2 327
  • 正文 我和宋清朗相戀三年湃窍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了闻蛀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,768評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡您市,死狀恐怖觉痛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情茵休,我是刑警寧澤薪棒,帶...
    沈念sama閱讀 34,461評(píng)論 4 333
  • 正文 年R本政府宣布手蝎,位于F島的核電站,受9級(jí)特大地震影響俐芯,放射性物質(zhì)發(fā)生泄漏棵介。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,094評(píng)論 3 317
  • 文/蒙蒙 一吧史、第九天 我趴在偏房一處隱蔽的房頂上張望邮辽。 院中可真熱鬧,春花似錦贸营、人聲如沸吨述。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锐极。三九已至,卻和暖如春芳肌,著一層夾襖步出監(jiān)牢的瞬間灵再,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工亿笤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留翎迁,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,571評(píng)論 2 362
  • 正文 我出身青樓净薛,卻偏偏與公主長(zhǎng)得像汪榔,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子肃拜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,666評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • vcode.jsp <%@page import="com.yc.res.util.VerifyCodeUtils...
    Arance閱讀 569評(píng)論 0 0
  • java驗(yàn)證碼的主要思路 1.生成一個(gè)固定尾數(shù)的隨機(jī)字符串 2.在內(nèi)存中創(chuàng)建一個(gè)圖片(固定高度和寬度的矩形) ...
    楊凱飛閱讀 1,262評(píng)論 0 1
  • 1痴腌、二維碼的生成 http://www.cnblogs.com/jtmjx/archive/2012/06/18/...
    行走的小明閱讀 2,154評(píng)論 0 0
  • KUROTORI閱讀 125評(píng)論 0 0
  • 百業(yè)社群告訴你運(yùn)營(yíng)社群核心是什么? 現(xiàn)在很多公司都在建立自己的運(yùn)營(yíng)社群燃领,但是很多運(yùn)營(yíng)者會(huì)吐槽:為什么我辛辛苦苦建立...
    小果凍_29af閱讀 256評(píng)論 0 1