目前win8 的SDK中還沒有圖片壓縮處理的API,只能藉助第三方的類庫來處理。可惜專門針對win8的圖片壓縮處理的第三方類庫也沒有。不過還好,win8的API跟Silverlight的API是差不多的,所以可以直接從Silverlight中移植過來。
我找了一個LibJpeg.net的Silverlight版的類庫源碼,經過簡單的修改,改為win8版的圖片壓縮處理類庫。這個類庫可以對圖片進行按品質百分比的壓縮。
下面貼出部分代碼。
protected override async void OnNavigatedTo(NavigationEventArgs e) { string str = "http://gimg.vancl.com/img/02/8705542.jpg"; var storageFile = await Windows.Storage.StorageFile.CreateStreamedFileFromUriAsync("temp.jpg", new Uri(str, UriKind.Absolute), null); var file = await storageFile.OpenAsync(Windows.Storage.FileAccessMode.Read); //原圖 BitmapImage bitImage1 = new BitmapImage(); bitImage1.SetSource(file); img.Source = bitImage1; txt.Text = "原圖大小:" + file.Size; //原圖壓縮處理 var jpegimage = new JpegImage(file.AsStream()); System.IO.MemoryStream stream = new MemoryStream(); jpegimage.WriteJpeg(stream, new CompressionParameters() { Quality = 20 });//壓縮品質為20% byte[] buffer = new byte[stream.Length]; stream.Seek(0, SeekOrigin.Begin); stream.Read(buffer, 0, buffer.Length); var ibuffer = CryptographicBuffer.CreateFromByteArray(buffer); InMemoryRandomAccessStream memoryRandomStream = new InMemoryRandomAccessStream(); await memoryRandomStream.WriteAsync(ibuffer); memoryRandomStream.Seek(0); BitmapImage bitImage2 = new BitmapImage(); bitImage2.SetSource(memoryRandomStream); img2.Source = bitImage2; txt2.Text = "壓縮後圖片大小:" + memoryRandomStream.Size; }
完整代碼下載