社区
Web 开发
帖子详情
图+字=图?图+图=图?字+字=图?
zgf19821202
2007-05-23 08:34:39
各位XDJM好:
我最近遇到了一个问题,就是如何把图片和文字结合起来,生成新的图片,在java中有没有API可以很好的实现这样的效果呢?请大家不吝赐教,谢谢!
...全文
319
9
打赏
收藏
图+字=图?图+图=图?字+字=图?
各位XDJM好: 我最近遇到了一个问题,就是如何把图片和文字结合起来,生成新的图片,在java中有没有API可以很好的实现这样的效果呢?请大家不吝赐教,谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zgf19821202
2007-05-24
打赏
举报
回复
不是简单的做验证码,图上增加文字,可以采用上面朋友说的方法实现,但是图+图的处理方式,就不能那么简单的来做了,比如两张图A和B,如果要让图B叠加在图A的某个区域上,不是完全的覆盖,而且这个区域是可以自己来控制的,这样的效果不知道该怎么来做?
For_suzhen
2007-05-24
打赏
举报
回复
就是做验证码吧
tanp520
2007-05-24
打赏
举报
回复
用过滤器可以实现
zhaochunhui
2007-05-23
打赏
举报
回复
package test.csdn;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.text.AttributedString;
import java.awt.font.TextAttribute;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.swing.ImageIcon;
import javax.imageio.ImageIO;
import java.text.AttributedCharacterIterator;
public class TestImg {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
String filePath = "c:\\AnnotationNotes.jpeg";
ImageIcon imgIcon = new ImageIcon(filePath);
Image aImg = imgIcon.getImage();
int width = aImg.getWidth(null);
int height = aImg.getHeight(null);
/*
* TYPE_INT_BGR表示一个具有 8 位 RGB 颜色分量的图像,对应于 Windows 或 Solaris 风格的 BGR
* 颜色模型,具有打包为整数像素的 Blue、Green 和 Red 三种颜色
*/
BufferedImage bufferImage = new BufferedImage(width, height,
BufferedImage.TYPE_INT_BGR);
Graphics2D grap = bufferImage.createGraphics();
/* 设置字体颜色 */
grap.setColor(Color.RED);
/* 设置背景颜色 */
grap.setBackground(Color.white);
grap.drawImage(aImg, 0, 0, null);
/* 创建要添加的水印文字 */
AttributedString info = new AttributedString("添 加 的 水 印 文字");
/* 设置字体 */
Font f = new Font("宋体", Font.ITALIC, 28);
info.addAttribute(TextAttribute.FONT, f, 0, "添 加 的 水 印 文字".length());
AttributedCharacterIterator acIter = info.getIterator();
/*
* 使用 Graphics2D 上下文的当前 Paint,呈现指定迭代器的文本。迭代器必须为每个字符指定字体。首字符的基线位于用户空间中的
* (x, y) 位置处
*/
grap.drawString(acIter, 100, 100);
/* 释放此图形的上下文并释放它所使用的所有系统资源 */
grap.dispose();
try {
FileOutputStream out = new FileOutputStream(filePath);
ImageIO.write(bufferImage, "JPEG", out);
} catch (FileNotFoundException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
}
joegu
2007-05-23
打赏
举报
回复
看到个验证码的,你可能有用
<%@ page contentType="image/jpeg"%>
<%@ page import="java.awt.*"%>
<%@ page import="java.awt.image.*"%>
<%@ page import="java.util.*"%>
<%@ page import="javax.imageio.*"%>
<%
//在内存中创建图象
int iWidth=130,iHeight=18;
BufferedImage image=new BufferedImage(iWidth,iHeight,BufferedImage.TYPE_INT_RGB);
//获取图形上下文
Graphics g=image.getGraphics();
//设定背景色
g.setColor(Color.white);
g.fillRect(0,0,iWidth,iHeight);
//画边框
g.setColor(Color.black);
g.drawRect(0,0,iWidth-1,iHeight-1);
//取随机产生的认证码(4位数字)
String rand=request.getParameter("Rand");
rand=rand.substring(0,rand.indexOf("."));
switch(rand.length())
{
case 1:rand="000"+rand;break;
case 2:rand="00"+rand;break;
case 3:rand="0"+rand;break;
default:rand=rand.substring(0,4);break;
}
//将认证码存入SESSION
session.setAttribute("Rand",rand);
//将认证码显示到图象中
g.setColor(Color.black);
g.setFont(new Font("Times new Roman",Font.PLAIN,18));
g.drawString(rand,10,15);
//随机产生88个干扰点,使图象中的认证码不易被其它程序探测到
Random random=new Random();
for(int iIndex=0;iIndex<88;iIndex++)
{
int x=random.nextInt(iWidth);
int y=random.nextInt(iHeight);
g.drawLine(x,y,x,y);
}
//图象生效
g.dispose();
//输出图象到页面
ImageIO.write(image,"JPEG",response.getOutputStream());
%>
输出时应用验证码
<script>document.write("<img border=0 src='/image.jsp?Rand="+Math.random()*10000+"'>");</script><br>
输认证码: <input name="Rand" maxlength=4 size="10"><br>
登录认证:
String Rand=request.getParameter("Rand");
String strRand=(String)session.getAttribute("Rand");
if(!strRand.equals(Rand))
{
//未通过;
}
iwlk
2007-05-23
打赏
举报
回复
把字写在图上就行了吧
infon
2007-05-23
打赏
举报
回复
没做过,,帮顶
吴恒
2007-05-23
打赏
举报
回复
把字写在图上就行了吧
9441
2007-05-23
打赏
举报
回复
使用java.awt.image.*,javax.imageio.*
和生成验证码的原理差不多
模型参数占用规划审计抽样工具|原创源码+测试+离线报告
原创 Model Parameter Footprint Planner Audit Sampling 工具,围绕“按参数量、精度、优化器状态、缓存和副本数估算加载、训练与推理内存占用”的基础结果,按风险、时间、来源和类型生成覆盖均衡且可复现的审计样本。压缩包包含完整源码、3 项自动化测试、可复现合成示例、离线 HTML/JSON/SVG 报告、1080×720 真实运行效果
图
、README、运行说明、功能清单、MIT License 及原创与授权声明。运行时零第三方依赖,不包含热点产品或开源项目源码、Logo、官方截
图
、论文、生产日志或其他受限素材。
嵌入式基于C语言工厂模式的传感器驱动管理:实现芯片替换的零耦合重构
内容概要:本文通过一个典型的嵌入式开发困境——因供应链问题需紧急更换传感器芯片,引出使用C语言实现工厂模式来解决代码强耦合问题。文章首先介绍如何利用C语言的结构体和函数指针模拟面向对象中的“接口”概念,定义统一的传感器操作接口(Sensor_Ops),实现业务层与具体驱动的解耦。接着展示“青铜段位”的简单工厂模式,通过switch-case根据宏定义选择具体传感器实现,使更换芯片只需修改一行代码。进一步,文章引入“王者段位”的自动注册工厂模式,利用编译器的section特性,将各传感器驱动的操作集自动注册到指定内存段,工厂通过遍历该段自动发现所有可用传感器,真正实现了“对扩展开放,对修改关闭”的开闭原则。最后阐述了该模式在硬件模拟(Mock)、多版本兼容和团队协作方面的实战价值。; 适合人群:从事嵌入式系统开发,具备一定C语言基础和项目经验的工程师,特别是常面临硬件变更、多型号产品维护或团队协作开发的从业者。; 使用场景及目标:①当项目中存在同类外设(如传感器、显示屏、存储芯片)多种选型,需要灵活切换时;②希望实现硬件抽象,便于在无实物硬件时进行软件仿真和单元测试;③构建多硬件版本产品(如Pro/Lite版),用一套代码库支持不同配置;④促进团队分工协作,降低驱动开发与业务逻辑之间的依赖和冲突。; 阅读建议:此资源不仅提供了代码范例,更重要的是传达了一种解耦和模块化的设计思想。建议读者在理解基本原理后,动手实践,尝试在自己的项目中应用简单工厂模式,并逐步过渡到自动注册模式,同时思考如何将此思想推广到其他模块(如通信、存储等)的设计中。
生成视频帧率契约工具|原创源码+测试+离线报告
原创 Generated Video Frame Rate Contract Auditor 工具,校验输入帧率、生成帧数、插帧、导出时基和播放器声明是否一致。压缩包包含完整源码、3 项自动化测试、可复现合成示例、离线 HTML/JSON/SVG 报告、1080×720 真实运行效果
图
、README、运行说明、功能清单、MIT License 及原创与授权声明。运行时零第三方依赖,不包含热点产品或开源项目源码、Logo、官方截
图
、论文、生产日志或其他受限素材。
上市公司间技术流动专利被引证数据2006-2025
01、数据介绍 上市公司专利引用匹配数据是企业间技术信息流动轨迹与强度的核心载体,其精准度直接决定“专利引用—技术溢出—企业绩效”传导机制的实证检验质量。该数据聚焦量化企业间基于专利引用的技术关联程度,通过专利引用关系识别与样本筛选结合的方式,构建反映“引用方—被引方”技术信息流动强度的度量指标,为揭示企业技术扩散规律、探究技术信息流动的经济后果、完善技术创新监管政策提供关键数据支撑,适配学术研究、企业技术战略研判、相关政策制定等多元场景。 数据名称:上市公司间技术流动专利被引证数据 数据年份:2006-2025 参考文献:叶艳婷,wu shi nong,吴益兵.共享保荐人、公司间技术信息传递与技术创新[J].管理世界,2025,41(01):187-214.DOI:10.19744/j.cnki.11-1235/f.2025.0012. 02、数据指标 股票代码 年份 公司简称 公司名称 股票代码被引证 公司简称被引证 被引证申请人公司名称 Citations
Web 开发
81,110
社区成员
341,722
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章