【Servlet】Javaweb中文字转图片
来源:互联网 发布:java中的restfull接口 编辑:程序博客网 时间:2024/05/17 04:50
本文是《【php】文字转图片》(点击打开链接)在Javaweb的实现。主要还是应对一些网络爬虫对电话号码与邮箱的抓取,同时禁止用户随意复制内容之类的。当然,被转换的文字主要还是数字与英文,中文的转化会乱码。
具体是如下效果:
不影响视觉效果,但是12345678是一张图片。
这一页index.jsp也因此是如此简单:
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>文字转图片</title></head><body><p>电话号码:<img src="./create_image_by_text?font_size=12&text=12345678"style="vertical-align: middle;" /></p></body></html>
img标签的src属性同样引用后台文字转图片名为create_image_by_text的Servlet就可以了。
这里create_image_by_text运用到Servlet3.0的注释,因此web.xml如下,无须写任何东西:
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"version="3.0"></web-app>
整个工程目录结构图很简单了,核心都在于create_image_by_text这个Servlet:
create_image_by_text.java的代码如下:
package text_image;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.font.FontRenderContext;import java.awt.geom.AffineTransform;import java.awt.geom.Rectangle2D;import java.awt.image.BufferedImage;import java.io.IOException;import javax.imageio.ImageIO;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@WebServlet(name = "create_image_by_text", urlPatterns = { "/create_image_by_text" })public class create_image_by_text extends HttpServlet {private static final long serialVersionUID = 9170360393931265363L;// 让Eclipse自己搞个序列号,以免警告@Overrideprotected void service(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {// 根据前台传过来的2个参数int font_size = Integer.parseInt(request.getParameter("font_size"));// 一个字体大小String str = request.getParameter("text");// 一个准备转化为图片的内容Font font = new Font("Arial", Font.BOLD, font_size);// 新建字体// 这一段是求出整个要转化为图片的内容之像素大小Rectangle2D r = font.getStringBounds(str, new FontRenderContext(AffineTransform.getScaleInstance(1, 1), false, false));// 根据字体大小新建矩形int unitHeight = (int) Math.floor(r.getHeight());// 获取单个字符的高度// 获取整个str用了font样式的宽度这里用四舍五入后+1保证宽度绝对能容纳这个字符串作为图片的宽度int width = (int) Math.round(r.getWidth()) + 1;int height = unitHeight + 3;// 把单个字符的高度+3保证高度绝对能容纳字符串作为图片的高度// 这里是画图BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_BGR);// 创建图片,也就是创建一张画纸Graphics graphics = image.getGraphics();// 创建画笔graphics.setColor(Color.WHITE);// 设置画笔为白色graphics.fillRect(0, 0, width, height);// 先用白色填充整张图片,也就是背景graphics.setColor(Color.black);// 在换成黑色graphics.setFont(font);// 设置画笔字体graphics.drawString(str, 0, font.getSize());// 画出字符串graphics.dispose();// 画完回收画笔ImageIO.write(image, "gif", response.getOutputStream());// 输出gif图片}}
从后台收到两个参数,一个字体大小,一个要转化为图片的内容。
之后设定字体为Arial,这里,只能使用Java本身支持的字体,不然可能会产生什么为只错误。所谓的Java本身支持的字体,也就是网页本来就自带的 宋体、黑体、仿宋GB2312、Arial、Times New Roman等,这里使用比较好看又大量兼容的Arial字体。
然后,根据字体的大小求出图片的尺寸。
最后利用Java的画图类,搞张画纸BufferedImage,搞支画笔Graphics,画完使用response.getOutputStream()输出。
0 0
- 【Servlet】Javaweb中文字转图片
- javaWeb中在servlet中response下载图片
- Javaweb中Servlet实现验证码图片的输出
- Javaweb开发中通过Servlet生成验证码图片
- javaweb中servlet创建实例
- javaweb中servlet生命周期介绍
- JavaWeb中servlet到底是干什么的
- javaweb中servlet处理cookies+json
- 【Servlet】Javaweb中获取任意个参数
- javaweb中ajax请求后台servlet
- 关于javaweb中servlet的理解。
- JavaWeb中Servlet的生命周期方法
- Javaweb中使用Servlet自动刷新页面
- JavaWeb中Servlet技术之监听器
- Javaweb中JSP和Servlet的概述
- javaweb中使用servlet实现验证码
- 给文字加描边,文字中加图片
- javaweb Servlet
- 向量空间初步
- Ubuntu12.04配置JDK1.8
- HttpClient和HttpURLConnection的区别
- 九度OJ 1181:遍历链表 (链表、排序)
- HTML1-排版,字体,列表,图像,超链接
- 【Servlet】Javaweb中文字转图片
- 《C程序设计语言》学习笔记——练习3-3
- LeetCode_Remove Duplicates from Sorted Array
- Hibernate在进行one-to-many时的级联设置-cascade
- getDimension,getDimensionPixelOffset和getDimensionPixelSize的一点说明
- Qt的三方库
- 327 (Div. 2) B
- 九度OJ 1182:统计单词 (计数)
- iOS开发 GitHub 第三方开源库