久久天天躁狠狠躁夜夜免费观看,精品国产粉嫩内射白浆内射双马尾,久久国产欧美日韩精品,久久久久久性高,激情欧美成人久久综合

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

JSON 2019-04-28 13:29:56 30226

最近部分頁面數(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("http://suancuo.cn", 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在線解析

原文地址:http://suancuo.cn/blog/321.html

轉(zhuǎn)載時(shí)必須以鏈接形式注明原始出處及本聲明。

本文主題:

如果本文對(duì)你有幫助,那么請(qǐng)你贊助我,讓我更有激情的寫下去,幫助更多的人。

關(guān)于作者
一個(gè)低調(diào)而悶騷的男人。
相關(guān)文章
JSOUP 教程—— Java爬蟲,簡(jiǎn)易入門,秒殺htmlparser
Jackson 美化輸出JSON,優(yōu)雅的輸出JSON數(shù)據(jù),格式化輸出JSON數(shù)據(jù)... ...
Java爬蟲,Jsoup 取大眾點(diǎn)評(píng)、美團(tuán)商家信息電話號(hào)碼解決方案
Java 獲取圖片屬性、獲取圖片EXIF屬性操作方法[metadata-extractor]
Jackson 轉(zhuǎn)換JSON,SpringMVC ajax 輸出,當(dāng)值為null或者空不輸出字段@JsonInclude
java json字符串轉(zhuǎn)json對(duì)象
關(guān)于Java Tomcat 內(nèi)存溢排查心得分享
對(duì)Java的常用對(duì)象(POJO、DTO、PO、BO、VO、DAO)詳細(xì)解釋及應(yīng)用場(chǎng)
Java Cookie 操作工具類
如何使用canvas轉(zhuǎn)換圖片類型
最新文章
計(jì)算機(jī)網(wǎng)絡(luò)的相關(guān)內(nèi)容 354
SOJSON V6 JavaScript 解密技巧與分析 5940
微信客服人工電話95068:如何快速解封微信賬號(hào)(2025最新指南) 11866
Java Http請(qǐng)求,HttpURLConnection HTTP請(qǐng)求丟失頭信息,Head信息丟失解決方案 5052
實(shí)用API合集分享:教你輕松獲取IP地址的API合集 8839
Linux I/O重定向 6705
Ruby 循環(huán) - while、for、until、break、redo 和 retry 3990
Node.js:全局對(duì)象 3604
如何使用終端檢查L(zhǎng)inux上的內(nèi)存使用情況 3779
JavaScript對(duì)象詳細(xì)剖析 3252
最熱文章
免費(fèi)天氣API,天氣JSON API,不限次數(shù)獲取十五天的天氣預(yù)報(bào) 745364
最新MyEclipse8.5注冊(cè)碼,有效期到2020年 (已經(jīng)更新) 703112
蘋果電腦Mac怎么恢復(fù)出廠系統(tǒng)?蘋果系統(tǒng)怎么重裝系統(tǒng)? 678428
Jackson 時(shí)間格式化,時(shí)間注解 @JsonFormat 用法、時(shí)差問題說明 561958
我為什么要選擇RabbitMQ ,RabbitMQ簡(jiǎn)介,各種MQ選型對(duì)比 511823
Elasticsearch教程(四) elasticsearch head 插件安裝和使用 483716
Jackson 美化輸出JSON,優(yōu)雅的輸出JSON數(shù)據(jù),格式化輸出JSON數(shù)據(jù)... ... 299543
Java 信任所有SSL證書,HTTPS請(qǐng)求拋錯(cuò),忽略證書請(qǐng)求完美解決 246654
Elasticsearch教程(一),全程直播(小白級(jí)別) 232088
227528
支付掃碼

所有贊助/開支都講公開明細(xì),用于網(wǎng)站維護(hù):贊助名單查看

查看我的收藏

正在加載... ...