根据输入的文字生成印章

前言

一年一度的课设又又又开始了,不少程序猿又要为自己的头发开始担心了

题目在这里插入图片描述

步骤

(1) 打开命令行窗口,执行exe文件

  1. win + R,输入cmd;在这里插入图片描述

  2. 将exe拖入窗口(例如C:\Users\hynoe\Desktop\ti2\test.exe);在这里插入图片描述

  3. 输入cd + 空格 + exe路径(例如cd C:\Users\hynoe\Desktop\ti2);

  4. 输入test.exe XingKai56.txt xxxx.bmp,回车;

  5. 输入四个汉字即可完成。

(2)思路

  1. 查找汉字编码。一般来说,指导书里会给出求汉字编码的代码,对于本题来说只要copy那段代码就好了(如果是题目一的话,就需要在记事本Ctrl + F 查找了)。
  2. 将汉字编码转换成字符串,并用二维数组存储起来。
  3. 最重要的一步,通过汉字编码读取txt文件,我采取的是通过读取一整行的方式,当确定了汉字编码时,从下下行开始读取,每当读取了56行,就可以break,并将指针返回文件首,反复四次即可(在读取时,即可将‘,’去除)。
  4. 调整字的位置,这一步对于部分同学来说可能理解起来有点困难,但是对于通过了题目一并创新的同学来说,很简单,甚至可以直接copy题目一的代码,对于不理解这步的同学,只要画个图,结合代码就很好理解了(首先是读取第一、二个字,行不变,然后是读取第三、四个字,列不变)。
  5. 最简单的一步,写入bmp文件。

(3)代码

/****************************************************************************

 ****  FileName:  demo.c

 ****  Function:  真彩色bmp图片文件的创建

 ****  Usage:     demo  xxxx.bmp

*****************************************************************************/

#include <conio.h>

#include <stdlib.h>

#include <stdio.h>

#include <math.h>

#include <malloc.h>

#include <string.h>

typedef unsigned char BYTE;

typedef unsigned short WORD;

typedef unsigned long DWORD;



/****  The file header of bmp file 文件头*****/

#include <pshpack2.h> //This file turns 2 byte packing of structures on, then sizeof(BITMAPFILEHEADER)=14, otherwise sizeof(BITMAPFILEHEADER)=16

typedef struct tagBITMAPFILEHEADER
{

    WORD bfType;

    DWORD bfSize;

    WORD bfReserved1;

    WORD bfReserved2;

    DWORD bfoffBits;

} BITMAPFILEHEADER;

#include <poppack.h> //This file turns packing of structures off



/****  The information header of bmp file 信息头*****/

typedef struct tagBITMAPINFOHEADER
{

    DWORD biSize;

    DWORD biWidth;

    DWORD biHeight;

    WORD  biPlanes;

    WORD  biBitCount;

    DWORD biCompress;

    DWORD biSizeImage;

    DWORD biXPeIsPerMeter;

    DWORD biYPeIsPerMeter;

    DWORD biCIrUsed;

    DWORD biClrImprotant;

} BITMAPINFOHEADER;



/****  The RGB data of bmp file 图像RGB数据*****/

typedef struct tagRGBDATA
{

    BYTE rgbBlue;

    BYTE rgbGreen;

    BYTE rgbRed;

} RGBDATA;


int main(int argc, char *argv[])
{
    RGBDATA *bmpData=NULL; //图像数据指针

    FILE *fp1,*fp2; //BMP文件指针

    unsigned char BM[100];

    char str[200];
    long t = 5;

    long width=112 + 4 * t; //图像宽度

    long height=112 + 4*t; //图像高度

    long dataSize=width*height;

    BITMAPFILEHEADER bmfHeader;

    BITMAPINFOHEADER bmiHeader;

    if(argc<3)

    {

        printf("\n    请指定您要生成的BMP文件名!\n");

        printf("\n    方法1:在cmd窗口输入: test.exe	XingKai56.txt  xxxx.bmp 后回车执行!\n");

        printf("\n    方法2:在VC的工程设置中添加参数: XingKai56.txt	xxxx.bmp后编译运行!\n");

        printf("\n    功能: 根据设定红绿蓝三色分量的值,控制显示不同的彩色条纹!\n\n");

        exit(0);

    }

    

//第一步:用命令行中给出的文件名新建一BMP文件,此时还是一个空文件

//打开用windows + R ,cmd 打开两个的两个命令参数argv[1],argv[2]

    if(!(fp2 = fopen(argv[1], "rb")))
    {
        printf("Cannot open 字体.txt file!");
        exit(0);
    }
    
    if(!(fp1 = fopen(argv[2], "wb+")))
    {
        printf("Cannot open BMP file!");
        exit(0);
    }
    
    int i, len, j = 0, k, c = 0;
	char bm[4][5];
	printf("请输入一个或多个汉字:\n");
	scanf("%s", BM);
	for(len = 0; BM[len]; len++);
	for(i = 0; i < len; i++)
		sprintf(str+2*i, "%x", BM[i]);
	for(i = 0; i < 2*len; i += 4){					// 将编码转化为字符并存入二维数组 
		strncpy(bm[j], str + i, 4); 
		bm[j][4] = 0;
		j++;
	}
	printf("汉字编码为:");
	for(i = 0; i < 4; i++){
		for(j = 0; j < 4; j++){
			printf("%c ", bm[i][j]);
		}
		printf("   ");
	}
	printf("\n");
					 
	char st1[120], st[120];									//读取 txt 
	char a[300][300], b[300][300], d[300][300]; 
	int w, ans = 0, r, n;
	for(i = 0; i < 4; i++){
		rewind(fp2);
		while(!feof(fp2)){
			fgets(st1, sizeof(st1) - 1, fp2);
			if(strstr(st1, bm[i])){
				while(fgetc(fp2) != '\n');			// 由于查到的只是汉字的编码,需要跳过下面一行才能开始读取 
				for(w = 0; w < 56; w++){
					fgets(st, sizeof(st) - 1, fp2);
					for(r = 0, n = 0; r < 56; r++, n++){
						if(st[n] == '_' || st[n] == 'X') a[ans][r] = st[n];			// 去掉逗号 
						else r--;
					}
					ans++;
				}
				break;
			}
		}
	}
	
	for(i = 0; i <= 111; i++){				// 这里其实有两步,不过我懒,就合为一步了,但也很简单,就是先第一、二个字,然后第三、四个字 
		for(j = 0; j <= 111; j++){
			if(j > 55) b[i+2*t][j+2*t] = a[i][j - 56];
			else b[i+2*t][j+2*t] = a[i + 112][j];
		}
	}
//第二步:置文件头数据并写入BMP文件

    bmfHeader.bfType=0x4d42;

    bmfHeader.bfSize=14+40+width*height*3;

    bmfHeader.bfReserved1=0;

    bmfHeader.bfReserved2=0;

    bmfHeader.bfoffBits=0x36;

    fwrite(&bmfHeader, sizeof(BITMAPFILEHEADER), 1, fp1);



//第三步:置信息头数据并写入BMP文件

    bmiHeader.biSize=40;

    bmiHeader.biWidth=width;

    bmiHeader.biHeight=height;

    bmiHeader.biPlanes=1;

    bmiHeader.biBitCount=24;

    bmiHeader.biCompress=0;

    bmiHeader.biSizeImage=width*height*3;

    bmiHeader.biXPeIsPerMeter=0;

    bmiHeader.biYPeIsPerMeter=0;

    bmiHeader.biCIrUsed=0;

    bmiHeader.biClrImprotant=0;

    fwrite(&bmiHeader, sizeof(BITMAPINFOHEADER), 1, fp1);



//第四步:置图像数据并写入BMP文件

//分配足够内存,让bmpData指向这块内存,用于存放图像各象素点的RGB分量值
    if((bmpData=(RGBDATA*)malloc(width*height*3))==NULL)
    {
        printf("bmpData memory malloc error!");
    }

//先在bmpData所指内存中置图像RGB数据,然后将所有数据写入BMP文件

    for(i=0; i<height; i++) //边框设置为红色
    {
        for(j=0; j<width; j++)
        {
            int k=(height-i-1)*width + j; 
            if(b[i][j] == 'X' || i < 1.8*t || j < 1.8*t || i >= height-1.8*t || j >= width-1.8*t)		// 1.8可以改变,它只是字与边框的距离 
            {
                bmpData[k].rgbBlue = 0;
                bmpData[k].rgbGreen = 0;
                bmpData[k].rgbRed = 255;
            }
            else
            {
                bmpData[k].rgbBlue = 255;
                bmpData[k].rgbGreen = 255;
                bmpData[k].rgbRed = 255;
            }
        }
    }

    fwrite(bmpData,sizeof(RGBDATA),dataSize,fp1);//将bmpData所指的RGB数据一次性写入BMP文件
    
    printf("\n    ******************************************************************\n");

    printf("\n         感谢您使用BMP图片文件制作DEMO程序                 \n");

    printf("\n             作者:XXX                 \n");

    printf("\n             日期:2024年2月29日                 \n");

    printf("\n             目的:编制印章生成程序时,供参考!       \n");

    printf("\n             功能:根据设定红绿蓝三色分量的值,输入不同的文字,制作不同的印章\n\n");

    printf("\n    ******************************************************************\n\n");

    printf("\n    恭喜您!BMP文件已经成功生成!\n");

    printf("\n    请在当前目录下查看生成的BMP文件%s\n\n",argv[2]);

    free(bmpData); //释放bmpData所指的内存空间

    bmpData=NULL; //置bmpData为空指针

    fclose(fp1); //关闭fp所指文件
    fclose(fp2);

}


(4)效果在这里插入图片描述

改进与优化

这并非最终版本,作为hnuster,肯定要进行创新的,这里的话,这个边框是可以改变的,如果是每次都去改一下代码的话,无疑是很麻烦的,所以我们可以在命令行窗口直接输入边框的数值
在这里插入图片描述
如果不改变的话,就数值就是5;再把它转化一下就好了

long t = atoi(argv[3]);

不过此时以下代码要放在最前面

int main(int argc, char *argv[])
{
	if(argc<4)

    {

        printf("\n    请指定您要生成的BMP文件名!\n");

        printf("\n    方法1:在cmd窗口输入: ti3pro.exe	xxxx.bmp	XingKai56.txt  5 后回车执行!\n");

        printf("\n    方法2:在VC的工程设置中添加参数: xxxx.bmp 后编译运行!\n");

        printf("\n    功能: 根据设定红绿蓝三色分量的值,控制显示不同的彩色条纹!\n\n");

        exit(0);

    }
	

否则会报错

蒟蒻的话

课设对我们这些萌新来说的确是一种很大的挑战,但同时来说也会从中学会很多,可以从网上借鉴各种模板,就像我写这几个题目时就从网上看了很多模板,并从中间找到了思路,最后写了出来。希望通过我的博客能给你们带来思路。
(蒟蒻第一次写博客,排版不是那么好,如果有错误,请指出,谢谢!!!)

ঞ摘 ꦿ星 ໌້ᮨ
关注 关注
  • 22
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
java 画印章_java 2d生成指定文字的电子印章图片
weixin_39630762的博客
02-16 385
import java.awt.AlphaComposite;import java.awt.BasicStroke;import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.Shape;import java.awt.font.FontRenderContext;import jav...
抢红包,根据汉字生成印章
01-26
4. **用户交互**:程序可能需要用户输入想要生成印章的汉字,这需要用到标准输入函数如`scanf`或`fgets`,同时可能还需要提供友好的命令行界面,让用户能够方便地输入和查看结果。 5. **文件操作**:生成印章可能...
探秘Seal:一款强大的印章制作工具
gitblog_00001的博客
03-31 513
探秘Seal:一款强大的印章制作工具 项目地址:https://gitcode.com/hequan2017/seal Seal 是一个开源的、基于Web的印章设计和生成平台,它利用HTML5与JavaScript技术,为用户提供了一种简单易用的方式来创建个性化或组织所需的印章样式。无论你是设计师还是非技术人员,只需几步操作就能轻松完成印章设计。 技术剖析 Seal项目采用前端技术栈构建,主要包括...
【Python】实现公章自动化生成以及自动盖章效果
weixin_43882507的博客
03-24 2579
前言:因为工作中需要经常自己盖章到模板图片上然后去打印签名,每次基本都是一个重复循环的过程,遂探索是否可以变成自动化脚本供我提高工作效率,同时在这次编码中我也使用chatgpt帮我实现一些代码,整个功能开发的过程非常快。原理很简单提取背景颜色区域将其RGBA中的透明度通道设置为0,然后把背景图片的显示内容贴到原图的背景区域即可。【实现贴图盖章的功能】【实习自动生成公章】
自动生成电子印章
热门推荐
xgh815的专栏
08-21 1万+
网络办公正逐渐成为常态,无纸化办公也是一个潮流,这二者需要电子签章,最简单的方法就是在纸上盖一个章然后扫描成电子图片文件,最后在你的系统加载这个签章电子图片文件。但这样就会些不理想的地方,如果不是透明的,叠加在有文字等的地方会遮盖了原来的内容;印章形状有圆形和椭圆形二种,圆形的话高和宽调成165的话打印出来和实际印章大小比较接近,椭圆形的宽和高则设置成197和131,当然在实际中是有不同大小的印章,只要调整宽和高就可。印章名称的绘画就复杂一点,为了文字的左右对称,需要设置绘画文字的起始角度、字间距和字体。
编程实现根据指定汉字生成电子印章
Eli_Code
06-14 8767
题目2:编程实现根据输入的汉字制作不同的电子印章 具体要求如下: 1)从键盘输入4个汉字,根据汉字的编码在隶书56点阵汉字字库文本文件LiShu56.txt中查找相应汉字的字型点阵信息,并将点阵信息存入数组。 2)建立印章文件XXX.bmp,按照BMP文件的格式写入文件头、信息头。 3)然后根据数组中的汉字点阵信息确定颜色数据写入XXX.bmp文件中。XXX.txt文件中的一个字符对应于XXX.bmp文件中一个彩色点的数据(包括蓝、绿、红三个字节数据,若是红色点,一般置B=0、G=0,R=255) 4)检查
php生成盖章图片,印章图案生成
weixin_36070797的博客
03-11 1629
印章,亦称图章,用作印于文件上表示鉴定或签署的文具,一般印章都会先沾上颜料再印上,不沾颜料、印上平面后会呈现凹凸的称为钢印,有些是印于蜡或火漆上、信封上的蜡印。制作材质有 金属、木头、石头、玉石等。印章图案生成器,输入汉字(比如:你的名字),选择印章样式和印章字体后就可生成得到一枚属于你自己的个性印章图案,有阴刻阳刻、仿古风汉印等样式,字体有印篆、方篆等,支持输出背景透明PNG印章图片。温馨提示本...
java生成电子印章的方法
Aurora_____的博客
12-22 1万+
趁着午休把代码整理整理然后写了这篇博客(。・∀・)ノ゙。之前更了一篇java使用itext编辑pdf,动态生成pdf文件(从利用Adobe创建pdf模板开始一步步详细介绍) ,想到里面有盖电子印章功能,之前做的时候搜的好多也不完善,所以记录一下给需要的人,你将要踩的坑俺都给你踩过了,前面的几个类的代码都可以直接复制,把utils的代码改一下就可以使用啦。???? 码云地址: 殷桃小狗子 / SealKit 1.utils里面写的几个生成印章的方法样式展示: 2.SealCircle.java实体
微信小程序 输入文字用canvas生成公章并转为图片
麋鹿的鹿
04-21 1252
微信小程序 输入文字用canvas生成公章并转为图片。
ruoyi根据名称生成电子印章图片上传
ljy199228的博客
12-01 537
根据公司名自定义生成电子印章,上传到上传路径文件夹下,返回图片访问路径保存数据库
基于maven构建,使用javafx开发的一款印章生成工具,可快速生成各种样式印章
11-06
印章生成工具中,用户可能需要选择模板、输入文字、调整参数等,这些都可以通过监听和响应相应事件来实现。通过这种方式,工具能实时响应用户的操作,提供良好的交互体验。 【模块化与可扩展性】 Maven的多模块...
Canvas画布图片文字拼接合成,生成图片
11-19
在`invitation`这个场景中,用户可以输入自定义的邀请内容,程序动态生成带有这些文字的邀请函图片。可能包括预设的背景图案、边框、装饰元素等,所有这些都可以通过Canvas进行绘制。 通过熟练掌握这些Canvas技术...
VSCode中配置C/C++环境
hong161688的博客
09-12 1489
在Visual Studio Code(VSCode)中配置C/C++环境是一个相对直接且功能强大的过程,它能让开发者利用VSCode的诸多便利功能来编写、编译和调试C/C++代码。以下是一个详细的步骤指南,涵盖了从安装必要的软件到配置编译器、调试器以及VSCode插件的全过程。
FastReport 模版打印如何实现
09-20
FastReport 模版打印如何实现
使用运算放大器模拟反相放大器的闭环电压增益simulink.rar
最新发布
09-20
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
基于java的抗疫医疗用品销售平台设计与实现.docx
09-20
基于java的抗疫医疗用品销售平台设计与实现.docx
vue+SpringBoot749乡村日常政务管理系统的设计与实现java毕业设计源码含论文.rar
09-20
jdk版本:jdk1.8+ 前端:vue.js+ElementUI 开发工具:IDEA 或者eclipse都支持 编程语言: java 框架支持:springboot 数据库: mysql 版本不限 数据库工具:Navicat/SQLyog都可以 详细技术:java+springboot+vue+MYSQL+MAVEN 前端采用的Vue框架,后端采用java语言,sprinboot框架,mybatis操作数据源,使用软件:idea,eclipse、MySQL。完成了用户登录管理等模块的设计与实现。完成了系统数据库的设计,并基于MySQL数据库管理系统
java毕业设计源码ssm859基于SSM框架的线上DIY手工艺品综合平台+vue程序数据库含论文.rar
09-20
前端采用的Vue框架,后端采用java语言,ssm框架,mybatis操作数据源,使用软件:idea,eclipse、MySQL。完成了用户登录管理等模块的设计与实现。完成了系统数据库的设计,并基于MySQL数据库管理系统 本系统基于SSM(Spring+SpringMVC+MyBatis)框架,适用于毕业设计, 基于B/S模式, mysql数据库,感兴趣的朋友们可以下载研究一下。 jdk版本:jdk1.8+ 前端:vue.js+ElementUI 开发工具:IDEA 或者eclipse都支持 编程语言: java 框架支持:ssm 数据库: mysql 版本不限 数据库工具:Navicat/SQLyog都可以 详细技术:java+ssm+vue+MYSQL+MAVEN
uniapp生成印章
07-01
2. 自定义开发:如果找不到现成的组件,可以考虑使用 UniApp 的 canvas 或者 SVG 功能,结合 JavaScript 来绘制印章图像,包括文字、图案等元素。 3. 使用腾讯云的定制服务:腾讯云可能提供了一些云服务或API,可以...
写文章

热门文章

  • 根据输入的文字生成印章 1085

最新评论

  • 根据输入的文字生成印章

    CSDN-Ada助手: 恭喜你开通了自己的博客!标题“蒟蒻的博客”很有个性,看来你对自己的博客有了明确的定位。接下来建议你在博客中多分享一些个人见解和经验,或者写一些有趣的故事,让读者更加了解你。希望你能坚持下去,不断进步,期待看到更多精彩的内容! 推荐【每天值得看】:https://bbs.csdn.net/forums/csdnnews?typeId=21804&utm_source=csdn_ai_ada_blog_reply1

  • 根据输入的文字生成印章

    CSDN-Ada助手: 恭喜你这篇博客进入【CSDN每天最佳新人】榜单,全部的排名请看 https://bbs.csdn.net/topics/618140788。

大家在看

  • 【C语言-数据结构】顺序表的基本操作
  • (Python) Structured Streaming读取Kafka源实时处理图像 71
  • MySQL 源码|85 - 语法解析(V2):语法解析入口逻辑|V20240919 590

最新文章

2024年1篇

目录

目录

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

天下网标王韶关网站优化推广外包武安网站seo优化排名网站关键词排名优化后付费本地网站优化大概多少钱网站白底图是不是便于优化和优化工一样的网站寿县网站seo优化外包公司大连专业seo优化网站费用番禺网站关键词优化费用网站优化代理商广州网站建设方案优化电商网站如何优化图片加载速度乐昌网站优化seo辽宁营销网站搭建优化秦皇岛网站优化重庆网站改版优化商丘百度网站优化方案鞍山优化网站排名网站优化qq群金华网站优化公司地址最新报价第一次做网站还要优化吗厦门关键词优化排名网站深圳最好的网站优化规模大的网站优化与推广电话广州网站搜索引擎网站优化昌乐网站推广优化费用东莞电器网站优化怎么做网站内部优化公司北京服装行业网站优化崇州专业网站优化香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

天下网标王 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化