Dưới đây là một thậm chí đoạn nhỏ gọn hơn của mã cho tiết kiệm như JPEG với chất lượng cụ thể:
var encoder = ImageCodecInfo.GetImageEncoders().First(c => c.FormatID == ImageFormat.Jpeg.Guid);
var encParams = new EncoderParameters() { Param = new[] { new EncoderParameter(Encoder.Quality, 90L) } };
image.Save(path, encoder, encParams);
Hoặc, nếu 120 nhân vật dòng rộng quá dài cho bạn:
var encoder = ImageCodecInfo.GetImageEncoders()
.First(c => c.FormatID == ImageFormat.Jpeg.Guid);
var encParams = new EncoderParameters(1);
encParams.Param[0] = new EncoderParameter(Encoder.Quality, 90L);
image.Save(path, encoder, encParams);
Đảm bảo chất lượng là long
hoặc bạn sẽ nhận được ArgumentException
!
Nguồn
2015-03-23 13:51:35
đó làm việc. Có vẻ như không có tất cả điều này, chất lượng tiêu chuẩn của 50L được sử dụng. – KdgDev
Bạn có lỗi đánh máy. jgpEncoder khi bạn có nghĩa là jpgEncoder;) –
EncoderParameter có thể sử dụng tài nguyên không được quản lý và phải được xử lý. Tài liệu Msdn hơi thiếu về chủ đề này. Nó sẽ cho biết mảng 'Param' được khởi tạo với các phần tử null (do đó không có gì để vứt bỏ trước khi gán đầu tiên cho mỗi phần tử) và' EncoderParameters' hủy bỏ các tham số hiện tại của nó trên việc loại bỏ nó. –