色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux下BMP圖片添加水印

嵌入式技術 ? 來源:嵌入式技術 ? 作者:嵌入式技術 ? 2022-08-16 11:20 ? 次閱讀

Linux下BMP圖片添加水印

BMP是英文Bitmap(位圖)的簡寫,它是Windows操作系統中的標準圖像文件格式,能夠被多種Windows應用程序所支持。隨著Windows操作系統的流行與豐富的Windows應用程序的開發,BMP位圖格式理所當然地被廣泛應用。這種格式的特點是包含的圖像信息較豐富,幾乎不進行壓縮,但由此導致了它與生俱來的缺點–占用磁盤空間過大。所以,目前BMP在單機上比較流行。

給BMP圖片添加水印的方法有很多,本示例采用直接讀寫文件方式來添加水印。

示例效果:
原始圖片

運行程序:

[xsw@xsw BMP_stady]$ ./a.out 
格式:./a.out <1.bmp> <2.bmp>
[xsw@xsw BMP_stady]$ ./a.out watermark.bmp 2.bmp
	圖片寬:500
	圖片高:312

	請輸入水印添加的位置(x:0~500 y:0~312):600 200

	[BMP_add_Watermark line 117]超出顯示邊線,請重新輸入

	請輸入水印添加的位置(x:0~500 y:0~312):100 100

[xsw@xsw BMP_stady]$ 

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDQ1MzY5NA==,size_16,color_FFFFFF,t_70

程序示例

  • 添加水印函數
/**********************添加水印************************************
**形參:
**     char *new_bmp  ---新生成的圖片
**     char *bmp_file ---需要添加水印的圖片
**     int num    --- 要添加幾個漢字水印
**     int size   --- 漢字大小(等高寬)
**返回值:0 成功,其他值---錯誤
*******************************************************************/
int BMP_add_Watermark(char *new_bmp,char *befor_bmp,int num,int size)
{
    FILE *fp[2];
    fp[0]=fopen(befor_bmp,"rb");
    if(fp[0]==NULL)
    {
        printf("[%s line %d]文件打開失敗",__FUNCTION__,__LINE__);
        return 1;
    }
    fp[1]=fopen(new_bmp,"w+b");
    if(fp[1]==NULL)
    {
        printf("[%s line %d]文件打開或創建失敗",__FUNCTION__,__LINE__);
        return 2;
    }
    BMP_HEADER bmp_head;
    BMP_INFO bmp_info;
    fread(&bmp_head,sizeof(BMP_HEADER),1,fp[0]);//讀取頭數據
    fwrite(&bmp_head,sizeof(BMP_HEADER),1,fp[1]);//頭數據寫入到新的文件中
    fread(&bmp_info,sizeof(BMP_INFO),1,fp[0]);//讀取位圖數據
    fwrite(&bmp_info,sizeof(BMP_INFO),1,fp[1]);//位圖數據寫入到新的文件中
    if(bmp_head.bfType!=0x4d42)
    {
        printf("[%s line %d]圖片格式錯誤\n",__FUNCTION__,__LINE__);
        return 3;
    }
    printf("\t圖片寬:%d\n",bmp_info.biWidth);
    printf("\t圖片寬:%d\n",bmp_info.biHeight);
    int one_line_size=bmp_info.biWidth*3;//一行的字節數
    while(one_line_size%4!=0)one_line_size++;//字節數不是4的倍數補全
    unsigned char one_line_buff[one_line_size];
    int i;
    /*復制圖片*/
    for(i=0;ibmp_info.biWidth-num*size || y>bmp_info.biHeight-size)
    {
        printf("\n\t[%s line %d]超出顯示邊線,請重新輸入\n",__FUNCTION__,__LINE__);
        goto pp;
    }
    int j,k;
    int y1=y;
    unsigned char data=0;
    int rgb=0xff0000;//設置水印的顏色
    int cnt=0;
    for(k=0;k;k++)>;i++)>
  • 主函數
int main(int argc,char **argv)
{
    if(argc!=3)
    {
        printf("格式:./a.out <1.bmp> <2.bmp>\n");
        return 0;
    }
    int stat=0;
    char buff[20];
    stat=BMP_add_Watermark(argv[1],argv[2],4,24);
    if(stat==0)
    {
        snprintf(buff,sizeof(buff),"eog %s",argv[1]);//字符串拼接
        system(buff);//創建進程
    }
    else printf("[%s line %d] err %d\n",__FUNCTION__,__LINE__,stat);
    return 0;
}
  • BMP格式結構體
#pragma pack(1)  /* 必須在結構體定義之前使用,這是為了讓結構體中各成員按1字節對齊*/
/*圖片頭*/
typedef struct BitMapFileHEADER
{
	unsigned short bfType;      //保存圖片類型。 'BM'
	unsigned long  bfSize;      //圖片文件的總大小,以字節為單位(3-6字節,低位在前)
	unsigned short bfReserved1;//位圖文件保留字,必須為0(7-8字節)
	unsigned short bfReserved2;//位圖文件保留字,必須為0(9-10字節) 
	unsigned long  bfOffBits;  //RGB數據偏移地址,位圖數據的起始位置,以相對于位圖(11-14字節,低位在前)//文件頭的偏移量表示,以字節為單位
}BMP_HEADER;

/*圖片信息*/
typedef struct BitMapFileInfo{
	unsigned long  biSize;      //本結構所占用字節數(15-18字節)
	unsigned long  biWidth;     //位圖的寬度,以像素為單位(19-22字節)
	unsigned long  biHeight;    //位圖的高度,以像素為單位(23-26字節)
	unsigned short biPlanes;    //目標設備的級別,必須為1(27-28字節)
	unsigned short biBitCount;   //每個像素所需的位數,必須是1(雙色)(29-30字節),4(16色),8(256色)16(高彩色)或24(真彩色)之一
	unsigned long  biCompression;//位圖壓縮類型,必須是0(不壓縮),(31-34字節)
//1(BI_RLE8壓縮類型)或2(BI_RLE4壓縮類型)之一
	unsigned long  biSizeImage;  //位圖的大小(其中包含了為了補齊行數是4的倍數而添加的空字節),以字節為單位(35-38字節)
	unsigned long  biXPelsPerMeter;//位圖水平分辨率,每米像素數(39-42字節)
	unsigned long  biYPelsPerMeter;//位圖垂直分辨率,每米像素數(43-46字節)
	unsigned long  biClrUsed;      //位圖實際使用的顏色表中的顏色數(47-50字節)
	unsigned long  biClrImportant; //位圖顯示過程中重要的顏色數(51-54字節)
}BMP_INFO;
  • 漢字取模點陣
//牛轉乾坤取模
const unsigned char font_buff[][24*24/8]=
{
{0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x08,0x00,0x01,0x88,0x00,0x01,0x88,0x00,0x01,0x8F,0xC0,0x03,0xFC,0x00,0x02,0x08,0x00,0x04,0x08,0x00,0x00,0x08,0x7C,
0x00,0x7F,0xFE,0x3F,0xC8,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x00,0x00},/*"牛",0*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x81,0x80,0x01,0x01,0x80,0x03,0x01,0x00,0x02,0xE1,0x00,0x1F,0x81,0xF0,0x04,0x0F,0x00,0x05,0x82,0x00,0x09,0x02,0x1C,0x09,0xC7,0xF8,
0x1F,0x3A,0x00,0x01,0x06,0x00,0x01,0xC4,0xE0,0x0F,0x07,0x70,0x39,0x00,0x40,0x01,0x00,0x80,0x01,0x04,0x80,0x01,0x03,0x00,0x01,0x01,0x80,0x01,0x01,0x80,0x00,0x00,0x80,0x00,0x00,0x00},/*"轉",1*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x83,0x00,0x01,0x02,0x00,0x01,0xE6,0x00,0x0F,0x84,0x00,0x01,0x04,0x20,0x02,0x05,0xC0,0x03,0xEA,0x00,0x1C,0x70,0x00,0x19,0x60,0x00,
0x0E,0x41,0x80,0x09,0xCF,0x00,0x0F,0x02,0x00,0x01,0x24,0x00,0x01,0xC4,0x00,0x7F,0x08,0x04,0x21,0x08,0x04,0x01,0x0C,0x04,0x03,0x06,0x3C,0x01,0x03,0xF8,0x00,0x00,0x00,0x00,0x00,0x00},/*"乾",2*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x06,0x01,0x80,0x06,0x01,0x00,0x06,0x01,0x00,0x06,0x01,0x18,0x06,0x01,0xFC,0x06,0x7F,0x0C,0x07,0xA1,0x0C,0x1E,0x33,0xE8,0x06,0x37,0x18,
0x06,0x11,0x18,0x06,0x91,0x10,0x07,0x1F,0xF0,0x1C,0x11,0x00,0x30,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x00,0x01,0x00},/*"坤",3*/
};
  • 查看添加水印后的圖片

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11292

    瀏覽量

    209323
  • WINDOWS
    +關注

    關注

    3

    文章

    3541

    瀏覽量

    88622
  • BMP
    BMP
    +關注

    關注

    0

    文章

    48

    瀏覽量

    17060
收藏 人收藏

    評論

    相關推薦

    批量縮小照片,加水印工具 (單文件版)

    批量縮小照片,加水印工具 (單文件版) 
    發表于 10-06 11:29

    C#教程之批量添加水印

    C#教程之批量添加水印,很好的C#資料,快來學習吧。
    發表于 04-20 11:13 ?5次下載

    教你如何給PDF文件添加水印

    ? ? 為了保證PDF文件的完整性,防止他人在其他用途上仿制使用該文件,這就是需要給PDF文件添加水印的目的,那么,怎么給PDF文件添加水印呢?使用迅捷PDF編輯器可以輕松實現,跟隨小編學起來
    發表于 07-09 13:53 ?877次閱讀
    教你如何給PDF文件<b class='flag-5'>添加水印</b>

    用PDF編輯軟件如何為PDF文件添加水印

    ? ? ? ?無論是工作中,還是生活中都會使用到PDF文件,PDF文件的修改編輯是需要使用到PDF編輯軟件的,那么,用PDF編輯軟件如何為PDF文件添加水印呢,是不是有很多的小伙伴都想知道怎么操作
    發表于 11-19 11:34 ?432次閱讀

    報告如何單獨添加水印?永洪BIV9.2解鎖版權保護新方式

    多個版本, 永洪BIV9.2加強版水印問世--支持為報告單獨添加水印,可以完美解決大家的各種需求場景 , 棒呆!接下來就跟著咱們看看新版水印如何使用吧! 【需求】報告單獨設置水印 1
    發表于 05-28 14:53 ?1483次閱讀
    報告如何單獨<b class='flag-5'>添加水印</b>?永洪BIV9.2解鎖版權保護新方式

    剖析BMP圖片文件

    剖析BMP圖片文件
    發表于 01-23 10:05 ?2次下載

    Linux應用開發-LCD顯示BMP圖片

    為了解BMP格式,這篇文章就采用Linux開發板作為實驗平臺,在LCD屏上讀取BMP圖片,完成繪制,不需要借助任何第三方庫,全部由純C語言代碼一行一行敲出來,深入理解
    的頭像 發表于 08-14 09:18 ?3034次閱讀

    linuxBMP圖片旋轉

    BMP位圖格式理所當然地被廣泛應用。這種格式的特點是包含的圖像信息較豐富,幾乎不進行壓縮,但由此導致了它與生俱來的缺點–占用磁盤空間過大。所以,目前BMP在單機上比較流行。
    的頭像 發表于 08-16 11:27 ?1376次閱讀
    <b class='flag-5'>linux</b><b class='flag-5'>下</b><b class='flag-5'>BMP</b><b class='flag-5'>圖片</b>旋轉

    LinuxBMP圖片截圖

    BMP位圖格式理所當然地被廣泛應用。這種格式的特點是包含的圖像信息較豐富,幾乎不進行壓縮,但由此導致了它與生俱來的缺點–占用磁盤空間過大。所以,目前BMP在單機上比較流行。
    的頭像 發表于 08-18 17:09 ?1213次閱讀

    LinuxBMP圖片縮放

    BMP位圖格式理所當然地被廣泛應用。這種格式的特點是包含的圖像信息較豐富,幾乎不進行壓縮,但由此導致了它與生俱來的缺點–占用磁盤空間過大。所以,目前BMP在單機上比較流行。
    的頭像 發表于 08-18 17:14 ?1942次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>下</b><b class='flag-5'>BMP</b><b class='flag-5'>圖片</b>縮放

    Linux開發_文件目錄操作介紹、創建BMP圖片

    介紹C語言文件編程,創建BMP圖片BMP圖片結構介紹,介紹目錄接口編程,Makefile知識點。
    的頭像 發表于 09-17 15:44 ?1481次閱讀
    <b class='flag-5'>Linux</b>開發_文件目錄操作介紹、創建<b class='flag-5'>BMP</b><b class='flag-5'>圖片</b>

    Linux開發_介紹BMP圖片上下翻轉、添加水印

    介紹BMP圖片上下翻轉、添加水印、通過學習BMP圖片結構學習文件編程。
    的頭像 發表于 09-17 15:43 ?1871次閱讀

    Linux開發_BMP圖片編程(翻轉、添加水印)

    接收BMP圖片編程,完成BMP圖片翻轉、水印添加等知識點。
    的頭像 發表于 09-17 15:33 ?1539次閱讀
    <b class='flag-5'>Linux</b>開發_<b class='flag-5'>BMP</b><b class='flag-5'>圖片</b>編程(翻轉、<b class='flag-5'>添加水印</b>)

    Python批量加水印

    現在只要你會使用命令,我們就能教大家怎么使用Python超級簡單地為圖片添加水印
    的頭像 發表于 02-24 11:06 ?736次閱讀
    Python批量<b class='flag-5'>加水印</b>

    java如何處理圖片水印

    在項目中經常有需要在圖片添加水印的需求以及在某些場合需要身份證圖片,這時就可以對身份證上加水印防止被用于其他用途,java 在處理
    的頭像 發表于 10-09 16:21 ?903次閱讀
    主站蜘蛛池模板: 嫩草影院久久国产精品| jizz老太婆| 亚洲AV无码一区二区三区牛牛| 欧美成a人片免费看久久| 恋夜影院支持安卓视频美女| 幻女FREE性俄罗斯学生| 国产午夜精品自在自线之la | 欧美一区二区日韩一区二区| 老师给美女同学开嫩苞| 久久受www免费人成_看片中文| 九九热视频 这里有精品| 精品一二三区久久AAA片| 国产专区青青草原亚洲| 黑色丝袜美女被网站| 含羞草影院免费区| 精品无码三级在线观看视频| 九九在线中文字幕无码| 久久不射网| 啦啦啦 中国 日本 高清 在线| 久久免费国产| 免费撕开胸罩吮胸视频| 欧美无码专区| 日本一卡精品视频免费| 四虎免费影院| 亚洲精品九色在线网站| 一本道久在线综合色姐| 主播蜜汁丝袜精品自拍| 99福利在线| 鬼灭之刃花街篇免费樱花动漫| 高清bblxx手机在线观看| 国产精品国产三级国AV在线观看 | 在线亚洲中文字幕36页| 最近中文字幕mv手机免费高清| 51无码人妻精品1国产| 99久久精品费精品蜜臀AV| YELLOW免费观看完整视频| 高清AV熟女一区| 黑人巨茎vide抽搐| 麻豆AV蜜桃AV久久| 肉蒲团从国内封禁到日本成经典| 午夜片无码区在线观看|