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