去除簡單水印方法的討論 原創

2021-04-01 23:25:58 字數 1427 閱讀 9735

因為前段時間跟cg方面打了不少交道,所以產生了今天的問題.

先看一張加了水印的圖:

其實我們可以看出,這個最終的圖(

c)其實是用另一張標誌圖(

b)與原圖(

a)疊加而得到(疊加的方式這裡就不作討論,有興趣的可以去參看參考書),疊加時賦予了一定的透明度(

tran).

這時,我們可以大概的形成乙個公式:

a+ b*tran=c

但是按此公式的話,原影象沒有任何修改,標誌圖的象素值全部疊加原影象上,最張影象應該變亮,而事實上卻沒有,那肯定原影象在疊加過程中也有了一定的衰減過程(

atten)

即:

a*atten + b*tran=c

推測標誌圖增加了多少值,原影象應該減少多少,即atten=1-tran.

經測試確實是如此(測試過程省略)

即a*(1-tran) + b*tran=c

由此,我們如果想把加過水印的影象恢復到原樣,只需要:

a=(c-b*tran)/(1-tran).

公式已經出來了,下面我們就開時做了。

這時候我們引入乙個常用且普通的影象檔案型別:tga

這種檔案格式簡單,它由標頭檔案、資料檔案、附加檔案構成。

tga標頭檔案結構

struct targaheader

tga;

//總共18個位元組

我們進行處理時,只要先跳過前18個位元組,直接對其資料部分進行處理。資料部分是按bgra來排列,即藍色、綠色、紅色、alpha通道值來分布。所以我們要處理的資料部分的大小為imagewidth* imageheight*4。之所以用這種檔案格式,因為其格式簡單,同時,這種檔案包含了影象的alpha通道資訊,有了這層alpha值資訊,我們可很容易的把影象中所需要的部分提取出來,這裡就不多講了,有興趣的朋友可以跟我聯絡。

現在我們來讀原影象檔案(**中,padfile,tran都是另外定義):

int removemask(char *filename)

} //儲存為檔案

同時,由公式可以看出,當水印是不用透明度,完全疊加時,就失去原圖的資訊,此法就不合適了.同時,水印透明度的指定也是先依照估計,然後逐漸取最近值的做法

有興趣的朋友可以跟我繼續交流。大家也可以嘗試採用bmp,jpg檔案結構。

去除PDF的水印和廣告的方法

我們的目的 去除廣告,還我們乙個清爽版的pdf文件 pdf的水印分兩種 生成pdf時或word編輯時加的水印 在做word時加的底圖 底紋。pdf的頁首頁尾也分兩種 做word時加的頁首頁尾 可能是正文的一部分 應該也是做word時加的頁首頁尾,但是軟體不承認就只能分到這一類了 第一種方法也是大家最...

potoshop中六種去除水印的方法

1 使用仿製圖章工具去除文字。這是比較常用的方法。具體的操作是,選取仿製圖章工具,按住alt鍵,在無文字區域點選相似的色彩或圖案取樣,然後在文字區域拖動滑鼠複製以覆蓋文字。要注意的是,取樣點即為複製的起始點。選擇不同的筆刷直徑會影響繪製的範圍,而不同的筆刷硬度會影響繪製區域的邊緣融合效果。2 使用修...

php 的簡單易用的調式方法,列印方法

簡單的除錯方法 echo,print r,var dump,exit,debug backtrace debug print backtrace gettype get class 等等函式。echo,print r,var dump 列印變數 包括陣列和自定義的object 的值。exit 立即退...