ImageMagick 与 JMagick去除水印
ImageMagick 官網(wǎng) http://www.imagemagick.org/script/index.php
JMagick 官網(wǎng) http://www.jmagick.org/index.html (官網(wǎng)的源碼svn:https://jmagick.svn.sourceforge.net/svnroot/jmagick)
1.? 簡介
? ? ImageMagick 是一個功能很強的圖片處理程序。可應(yīng)用在多種操作系統(tǒng)平臺上。
Jmagick通過jni操作ImageMagick。
?
? ? ?Javashop支持通過ImageMagick生成圖片縮略圖,但需要系統(tǒng)中配置好?ImageMagick。
?
2.? 安裝環(huán)境要求
確認已經(jīng)安裝了zlib、freetype、libpng和jpeg-6b等lib的開發(fā)包,可以用rpm-aq查詢,例如,你應(yīng)該檢查是否已經(jīng)安裝如下rpm包:
rpm –qa |grep libpng
rpm –qa |grep libpng-devel
rpm –qa |grep libjpeg
rpm –qa |grep gd-devel
?
如果你希望支持tiff格式,還應(yīng)該檢查
rpm –qa |grep libtiff
?
3.? 安裝ImageMagick包
tar xzvf ImageMagick- 6.4.0.tar.gz
?
./configure --prefix=/opt/ImageMagick --enable-share--enable-static
?
Make
?
make install
?
使用convert 看看是否可以轉(zhuǎn)換文件
? 測試:convert-geometry 600x200 star.jpg star_small.gif
4.? 安裝JMagick包
tar xzvf jmagick-6.4.0.tar.gz
?
./configure --prefix=/opt/JMagick--with-magick-home=/opt/ImageMagick
--enable-share --enable-static --with-java-home=/usr/java/jdk6
?
make all
make install
5.? 配置環(huán)境變量。
vi /etc/profile
?
加入:
export PATH=$PATH:/opt/ImageMagick/bin
export LD_LIBRARY_PATH=:/opt/JMagick/lib:/opt/ImageMagick/lib
exportDYLD_LIBRARY_PATH=:/opt/JMagick/lib:/opt/ImageMagick/lib
export CLASSPATH=$CLASSPATH:/opt/JMagick/lib
?
?
如果要在Tomcat中運行,需要再運行時加入?yún)?shù): -Djmagick.systemclassloader=no
?
或者在程序中寫入:System.setProperty("jmagick.systemclassloader","no")。
=========================================================================
Jmagick的安裝和使用 
ImageMagick 是一個用來創(chuàng)建、編輯、合成圖片的軟件。它可以讀取、轉(zhuǎn)換、寫入多種格式的圖片。圖片切割、顏色替換、各種效果的應(yīng)用,圖片的旋轉(zhuǎn)、組合,文本,直線, 多邊形,橢圓,曲線,附加到圖片伸展旋轉(zhuǎn)。ImageMagick是免費軟件:全部源碼開放,可以自由使用,復(fù)制,修改,發(fā)布。支持大多數(shù)的操作系統(tǒng)。
1.對用戶上傳圖片進行縮放?
 ??? 對于用戶自己上傳的圖片不能簡單的 用css限制大小,因為這樣每次加載圖片時候還是會加載整幅大圖。占用多余的寬帶,并且影響頁面加載速度。應(yīng)該根據(jù)實際顯示需要進行縮放。比如我想要用戶 相冊里的圖片大小不能超過500x300:?
 用ImageMagick處理起來很簡單
 convert -resize "500x300>" input.jpg? output.jpg #如果圖片比500x300小就保持原樣,以防小圖片被放大失真。
2.生成不同比例縮略圖 
 ??? 一般相冊等應(yīng)用,都會提供縮略圖和預(yù)覽圖,這些縮略圖同樣不能簡單的用css來限制大小,要為每個圖片生成不同比例的預(yù)覽圖。 
 3.去除多余信息 
 ??? Exif信息是數(shù)碼相機在拍攝過程中采集的一系列信息,這些信息放置在我們熟知的jpg文件的頭部,也就是說Exif信息是鑲嵌在JPEG圖像文件格式內(nèi)的一組拍攝參數(shù),主要包括攝影時的光圈、快門、ISO、日期時間等各種與當(dāng)時攝影條件相關(guān)的訊息,相機品牌型號,色彩編碼,拍攝時錄制的聲音以及全球定位系統(tǒng)(GPS)等信息。簡單的說,它就好像是傻瓜相機的日期打印功能一樣,只不過Exif信息所記錄的資訊更為詳盡和完備。不過,具有Exif信息的 JPEG圖像文件要比普通的JPEG文件略大一點。還有就是像PS這種軟件處理過的圖片會有“program comments”。如果不是專業(yè)的攝影類網(wǎng)站,這些信息是沒有用的,可以去掉: 
 convert -strip input.jpg output.jpg
4.調(diào)節(jié)壓縮比 
 ??? 大多時候,我們的網(wǎng)站并不需要那么清晰的圖片,適量調(diào)節(jié)JPG圖片的壓縮比會減少圖片大小,肉眼并不會分辨出質(zhì)量被壓縮后的圖片。通常75%是最佳比例。 
 convert -quality 75% input.jpg output.jpg
上面幾個步驟可以一次搞定:
 convert -resize "500x300" -strip -quality 75% input.jpg output.jpg
上面說的都是針對JPG格式的處理方式,下面說一下BMP,GIF,PNG等格式的處理。
對于BMP直接轉(zhuǎn)成JPG就可以了。再按照上面的方式處理。
而GIF和PNG貌似有些特殊。GIF的一些特性(動畫效果,透明等)是 JPG沒有的,可以根據(jù)實際情況選擇轉(zhuǎn)或不轉(zhuǎn),如果轉(zhuǎn)換成jpg,取第一幀只需要這樣:
 convert -format jpg input.gif input.jpg
對于真實世界的PNG圖片(通常指照片),一般先轉(zhuǎn)換成JPG,再通過上面的辦法來壓縮。
但是要注意一點,透明或半透明的PNG圖片在轉(zhuǎn)換成JPG時透明部分會變成黑色。。。建議做用戶頭像時候不要轉(zhuǎn)成JPG。。很難看~~~
本人頭像就是深受毒害。。
關(guān)于圖片擴展名
發(fā)現(xiàn)大部分網(wǎng)站喜歡把用戶上傳的圖片(頭像,相冊等)都統(tǒng)一轉(zhuǎn)成特定格式(一般都是 jpg)。這樣做的潛在弊端就是在用像ImageMagick這樣的軟件處理的時候會根據(jù)擴展名做隱式格式轉(zhuǎn)換。
個人覺得在保存圖片的時候不加擴展名處理起來更靈活一些。? 現(xiàn)在介紹使用Jmagick的使用,可以生成質(zhì)量很好的縮略圖,當(dāng)然還有其 他很多圖像處理的方法。
?? 首先jmagick(http://www.yeo.id.au/jmagick/)是ImageMagick(http: //www.imagemagick.org/)的java 應(yīng)用的接口。所以要先安裝ImageMagick應(yīng)用程序,你的java應(yīng)用才能使用,在主頁上你可以輕松找到下載的鏈接。
?? 1。下載jmagick,imagemagick
?? 2.安裝ImageMagick,網(wǎng)站上有安裝方法(windows,unnix),我只在win上做了安裝,安裝以后把安裝目錄下所有的dll文件 copy到windows/system32/目錄下。
?? 3。下載的jmagick包含jmagick.jar,jmagick.dll文件,jmagick.dll需要copy到 windows/system32/目錄下。
?? 4。web應(yīng)用如果部署到tomcat下,那么最好在catalina.bat文件中改變?nèi)缦略O(shè)置
set JAVA_OPTS=%JAVA_OPTS% -Xms256M -Xmx768M -XX:MaxPermSize=128M -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file="${catalina.base}\conf\logging.properties"
?? 避免heap溢出的問題,參數(shù)看你自己的機器而定。( -Xms256M -Xmx768M -XX:MaxPermSize=128M )
?? 5。還要注意如果部署到web應(yīng)用,你在使用的class里面需要
??????System.setProperty("jmagick.systemclassloader","no");
???? 要不然會報出UnsatisfiedLinkError: no JMagick in java.library.path.
???? 實例如下:
public void resize(int w, int h) throws IOException {
????????try {
????????????????// Resize
??????????System.setProperty("jmagick.systemclassloader","no");
????????????????ImageInfo info = new ImageInfo(sourceFileName);
????????????????MagickImage image = new MagickImage(info);
????????????????MagickImage scaled = image.scaleImage(w, h);//小圖片文件的大小.
????????????????scaled.setFileName(destFile);
????????????????scaled.writeImage(info);
??????????????}??catch(MagickApiException ex) {
??????????????????????System.out.println(ex);
??????????????}??catch(MagickException ex) {
??????????????????????System.out.println(ex);
??????????????}
????}
一些基本使用方法的代碼,具體大家可以參考官方給的源碼,那里比較詳細:
總結(jié)
以上是生活随笔為你收集整理的ImageMagick 与 JMagick去除水印的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: hexo yilia主题添加音乐
- 下一篇: Flutter Provider局部刷新
