因為前段時間跟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 立即退...