以前研究過AWT的圖像處理,知道AWT在圖像處理方面的功力不淺,特別是在3D圖像處理非常擅長,不過就是API不怎么可愛,使用起來還是比較麻煩,還是覺得SWT的API比較親切,我個人對SWT也是非常感興趣,而且我們的項目也是基于SWT的。
壓縮圖片方式要么是將格式進行轉(zhuǎn)換,比如將bmp格式轉(zhuǎn)換成jpeg格式的,這種方式是通過損失圖片質(zhì)量來達到的壓縮的目的,不過jpeg格式的圖片還是比較清晰,不仔細看根本看不出什么差別。還有一種是調(diào)整圖片的分辨率,現(xiàn)在的數(shù)碼相機拍出來的照片分辨率都很高,我從辦事處采集的圖片發(fā)現(xiàn)大多數(shù)圖片格式是 3264 * 2448,大小在2.5mb左右,如果不進行壓縮處理就進行上傳,那服務(wù)器肯定受不了,經(jīng)過開會討論,覺得圖片大小控制在100kb左右比較能讓服務(wù)器和用戶接受,而且要看的清楚照片中車輛的車牌號。
這并不是什么 "不可能完成的任務(wù)" ,在我的機器上測試通過,為了方便起見,分辨率統(tǒng)一調(diào)成800x600,發(fā)現(xiàn)圖片質(zhì)量還過得去:
名稱 |
壓縮前分辨率 |
壓縮前大小(kb) |
壓縮后大小(kb) |
阿斯頓馬丁One-77 P10.bmp |
1027 x 768 |
1537 |
85 |
豫P460xx.JPG |
3264 x 2448 |
2083 |
48 |
IMG_1338.jpg |
2736 x 3648 |
4428 |
72 |
壓縮后的格式都是JPEG格式的.
我使用的壓縮代碼是這樣實現(xiàn)的:
ImageLoader imageLoader = new ImageLoader();
imageLoader.data = new ImageData[] {newImageData};
imageLoader.save("C:/imgzip/壓縮后的圖片.jpg",SWT.IMAGE_JPEG);
先將圖片路徑傳入到ImageData的構(gòu)造方法中構(gòu)造一個ImageData對象,這個ImageData對象用于描述圖片的屬性,比如圖片的像素、大小、尺寸等信息,可以通過ImageData的scalaTo(int width ,int height)方法完成圖片大小縮放,然后使用ImageLoader這個類將圖片保存到指定的路徑,還可以指定保存的格式。
很簡單吧,說實話,我不是很相信使用AWT能夠通過這么簡單的方式完成圖片大小的縮放和壓縮,當然我是指AWT的元素API。