日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux系统下替换图片,Linux(ubuntu系统)下使用FreeImage库

發(fā)布時間:2024/7/19 linux 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux系统下替换图片,Linux(ubuntu系统)下使用FreeImage库 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Linux(ubuntu系統(tǒng))下使用FreeImage庫

Linux(ubuntu系統(tǒng))下使用FreeImage庫

最近在搞一個圖像處理的項目,需要用到FreeImage,之前在Windows下用過,很簡單,因為FreeImage官網(wǎng)提供了可供使用的靜態(tài)庫動態(tài)庫,直接包含就行了。現(xiàn)在需要在Linux平臺下使用,發(fā)現(xiàn)官網(wǎng)并沒有提供直接編譯好的庫,需要自己編譯。安裝過程也遇到好幾個大坑,所幸終于解決了。記錄一下自己下載編譯安裝的步驟:

1. 下載FreeImage源碼

http://freeimage.sourceforge.net/download.html

這是官網(wǎng),選擇下面這個

Source distribution

Source distribution includes source for FreeImage, C++, C#, Delphi and VB6 wrappers, examples and the internally used libraries LibTIFF, LibJPEG, LibPNG, ZLib, OpenEXR, OpenJPEG, LibRaw, LibJXR and LibWebP.

Download FreeImage 3.17.0

下載即可!下載完解壓得到FreeImage這個文件夾。

2. 既然是要自己編譯,那么肯定是要用到makefile文件,打開FreeImage文件夾可以看到里面有很多makefile的文件,只是后綴不一樣罷了:

這些其實只是給不同的系統(tǒng)環(huán)境下用的而已,繼續(xù)在文件夾中找可以看到一個叫做“README.linux”的文件,這就是關(guān)于在linux下如何安裝使用的說明文檔了,打開它,按照里面的說明來操作。

摘錄一些重要的信息:

1)為了編輯和使用FreeImage庫,你不需要在你的電腦/usr/lib directory目錄下安裝任何third party libraries。

2)為了避免internal third party libraries和系統(tǒng)庫之間的不兼容,FreeImage makefile使用了gcc的

"-fvisibility=hidden"選項,如果你使用的是老版本的gcc,你可能得先移除這個選項

3)在庫編輯安裝之后,你應該可以使用-lfreeimage option來link programs。You can also statically link with libfreeimage.a.

4) 安裝FreeImage

------------

注意:你需要獲得root權(quán)限才可以在/usr/lib目錄下安裝庫

安裝步驟很簡單,如下:

1) Enter the FreeImage directory

2) Build the distribution :

make

make install

3) Clean all files produced during the build process

make clean

可以看到,安裝使用的方式其實很簡單,就是

(1)在FreeImage的目錄下右鍵打開終端,先輸入make命令進行編譯。

(2)編譯好之后使用make install將編譯好的頭文件FreeImage.h寫進系統(tǒng)的/usr/include目錄下,把庫文件libfreeimage.o給寫進系統(tǒng)的/usr/lib目錄下。

(3)然后執(zhí)行make clean清除剛才編譯生成的那些中間文件即可。

但是!!!并沒有想當然的那么簡單,首先輸入make命令是正常在編譯了,但是編譯完之后提示了下面的錯誤:

dsp.upsampling_mips_dsp_r2.o

Source/LibWebP/./src/dsp/dsp.upsampling_mips_dsp_r2.c:37:34: error: invalid character ' ' in raw string delimiter

"shll_s.w %["#R"], %["#R"], 9 \n\t"

^

Source/LibWebP/./src/dsp/dsp.upsampling_mips_dsp_r2.c:37:48: error: invalid character ' ' in raw string delimiter

"shll_s.w %["#R"], %["#R"], 9 \n\t"

^

Source/LibWebP/./src/dsp/dsp.upsampling_mips_dsp_r2.c:40:34: error: invalid character ' ' in raw string delimiter

"precrqu_s.qb.ph %["#R"], %["#R"], $zero \n\t"

^

Source/LibWebP/./src/dsp/dsp.upsampling_mips_dsp_r2.c:40:48: error: invalid character ' ' in raw string delimiter

"precrqu_s.qb.ph %["#R"], %["#R"], $zero \n\t"

^

Source/LibWebP/./src/dsp/dsp.upsampling_mips_dsp_r2.c:43:34: error: invalid character ' ' in raw string delimiter

"srl %["#R"], %["#R"], 24 \n\t"

^

Source/LibWebP/./src/dsp/dsp.upsampling_mips_dsp_r2.c:43:48: error: invalid character ' ' in raw string delimiter

"srl %["#R"], %["#R"], 24 \n\t"

^

Makefile.gnu:61: recipe for target 'Source/LibWebP/./src/dsp/dsp.upsampling_mips_dsp_r2.o' failed

make[1]: *** [Source/LibWebP/./src/dsp/dsp.upsampling_mips_dsp_r2.o] Error 1

make[1]: Leaving directory '/home/jianqiang/Documents/FreeImage'

Makefile:21: recipe for target 'default' failed

make: *** [default] Error 2

Error的內(nèi)容是invalid character '' ub raw string delimiter.意思是原始字符串分隔符中有無效字符。產(chǎn)生這個錯誤的原因是編譯器支持了C++11的新標準,在C++ 11中引入了原始字符串這樣一個新特性:使用''R''等方式來定義一個不進行轉(zhuǎn)義的字符串。而在FreeImage的一些代碼中,卻使用了R作為一些宏函數(shù)的參考,所以在FreeImage中那些被當成了原始字符串,從而產(chǎn)生了錯誤。

定位到提示錯誤的文件dsp.unsampling_mips_dsp_r2.c,打開之后找到對應的錯誤行,是下面這些:

#if !defined(WEBP_YUV_USE_TABLE)

#define YUV_TO_RGB(Y, U, V, R, G, B) do { \

const int t1 = kYScale * Y; \

const int t2 = kVToG * V; \

R = kVToR * V; \

G = kUToG * U; \

B = kUToB * U; \

R = t1 + R; \

G = t1 - G; \

B = t1 + B; \

R = R + kRCst; \

G = G - t2 + kGCst; \

B = B + kBCst; \

__asm__ volatile ( \

"shll_s.w %["#R"], %["#R"], 9 \n\t" \

"shll_s.w %["#G"], %["#G"], 9 \n\t" \

"shll_s.w %["#B"], %["#B"], 9 \n\t" \

"precrqu_s.qb.ph %["#R"], %["#R"], $zero \n\t" \

"precrqu_s.qb.ph %["#G"], %["#G"], $zero \n\t" \

"precrqu_s.qb.ph %["#B"], %["#B"], $zero \n\t" \

"srl %["#R"], %["#R"], 24 \n\t" \

"srl %["#G"], %["#G"], 24 \n\t" \

"srl %["#B"], %["#B"], 24 \n\t" \

: [R]"+r"(R), [G]"+r"(G), [B]"+r"(B) \

: \

); \

} while (0)

出現(xiàn)錯誤的地方就是所有的帶有 R"] 的位置,解決方法很簡單,把R換成Red即可。

#if !defined(WEBP_YUV_USE_TABLE)

#define YUV_TO_RGB(Y, U, V, Red, G, B) do { \

const int t1 = kYScale * Y; \

const int t2 = kVToG * V; \

Red = kVToR * V; \

G = kUToG * U; \

B = kUToB * U; \

Red = t1 + Red; \

G = t1 - G; \

B = t1 + B; \

Red = Red + kRCst; \

G = G - t2 + kGCst; \

B = B + kBCst; \

__asm__ volatile ( \

"shll_s.w %["#Red"], %["#Red"], 9 \n\t" \

"shll_s.w %["#G"], %["#G"], 9 \n\t" \

"shll_s.w %["#B"], %["#B"], 9 \n\t" \

"precrqu_s.qb.ph %["#Red"], %["#Red"], $zero \n\t" \

"precrqu_s.qb.ph %["#G"], %["#G"], $zero \n\t" \

"precrqu_s.qb.ph %["#B"], %["#B"], $zero \n\t" \

"srl %["#Red"], %["#Red"], 24 \n\t" \

"srl %["#G"], %["#G"], 24 \n\t" \

"srl %["#B"], %["#B"], 24 \n\t" \

: [R]"+r"(R), [G]"+r"(G), [B]"+r"(B) \

: \

); \

} while (0)

修改完這個文件中的錯誤,和剛才那個文件在同一個目錄下還有一個會出現(xiàn)同樣錯誤的文件:dsp.yuv_mips_dsp_r2.c

這個的錯誤出現(xiàn)在第75行的"#R"(%[dst])

"shll_s.w %[temp7], %[temp7], 9 \n\t" \

"precrqu_s.qb.ph %[temp5], %[temp5], $zero \n\t" \

"precrqu_s.qb.ph %[temp6], %[temp6], $zero \n\t" \

"precrqu_s.qb.ph %[temp7], %[temp7], $zero \n\t" \

"srl %[temp5], %[temp5], 24 \n\t" \

"srl %[temp6], %[temp6], 24 \n\t" \

"srl %[temp7], %[temp7], 24 \n\t" \

"sb %[temp5], "#R"(%[dst]) \n\t" \

"sb %[temp6], "#G"(%[dst]) \n\t" \

"sb %[temp7], "#B"(%[dst]) \n\t" \

同樣按照上面的方式把R用Red替換即可。

保存修改,然后重新打開終端窗口輸入:make。

這些就會執(zhí)行成功了!為了驗證我們可以打開FreeImage/Dist文件夾,會發(fā)現(xiàn)下面生成了3個文件:

FreeImage.h就是頭文件,libfreeimage.a就是linux版本的庫文件(Windows下同下是.lib)。

3. 其實進行到上面這一步,那兩個文件你就可以拿去用了,用來編寫自己的程序什么的。但是如果你要在本機上寫一些代碼來用,那就需要在本機上安裝一下FreeImage,說是安裝,其實就是執(zhí)行了兩次拷貝操作而已:

把FreeImage.h文件寫入到系統(tǒng)目錄/usr/include文件夾下

把libfreeimage.a寫入到系統(tǒng)目錄/usr/lib文件夾下

當然,你不需要自己親手來進行寫入,因為并不是直接復制粘貼就可以,linux系統(tǒng)下的系統(tǒng)目錄你沒有root權(quán)限是沒辦法直接復制粘貼文件的。我們直接使用命令就好,在終端繼續(xù)輸入:

sudo make install

系統(tǒng)就會自動執(zhí)行上面的兩個操作了,sudo是獲取root權(quán)限的意思,如果你按照官網(wǎng)文檔說明只使用make install,是會報錯提示你要先獲取root權(quán)限的,所以直接使用上面的命令就好。

4. 最后我們執(zhí)行一次

make clean

將剛才編譯過程中生成的中間文件都刪除掉就可以了。

Linux(ubuntu系統(tǒng))下使用FreeImage庫相關(guān)教程

總結(jié)

以上是生活随笔為你收集整理的linux系统下替换图片,Linux(ubuntu系统)下使用FreeImage库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。