ASP.NET MVC'den dönen JPEG görüntüleri desteklemeye çalışıyorum (90 derecelik artışlarla). Ben System.Drawing
(GDI +) kullanmaya çalışıyorum, ancak sorunları yaşıyorum..NET'te JPEG'leri minimum kalite kaybıyla döndürme
Görüntüyü döndürebilen ancak kalite kaybına neden olan Image.RotateFlip
kullanmayı denedim. Enkoder kalitesi 100 olsa bile, döndürülen görüntüde orijinal görüntüde olmayan ve diğer programları (Gimp vb.) Kullanarak döndürdüğümde görünmeyen nesneler görünür.
using (Image image = Image.FromFile("C:\\source.jpg")) {
ImageFormat sourceFormat = image.RawFormat;
image.RotateFlip(RotateFlipType.Rotate90FlipNone);
EncoderParameters encoderParams = null;
try {
if (sourceFormat == ImageFormat.Jpeg) {
encoderParams = new EncoderParameters(1);
encoderParams.Param[0] = new EncoderParameter(Encoder.Quality, 100L);
}
image.Save("C:\\target.jpg", GetEncoder(sourceFormat), encoderParams);
} finally {
if (encoderParams != null)
encoderParams.Dispose();
}
}
transforming a JPEG without loss of information ile ilgili bir makale buldum. Encoder.Transformation
.NET gelen bir seçenek olarak görünmektedir kullanma - ancak bunun boyutları bilen var mı 16.
using (Image image = Image.FromFile("C:\\source.jpg")) {
ImageFormat sourceFormat = image.RawFormat;
EncoderParameters encoderParams = null;
try {
if (sourceFormat == ImageFormat.Jpeg) {
encoderParams = new EncoderParameters(1);
encoderParams.Param[0] = new EncoderParameter(Encoder.Transformation,
(long)EncoderValue.TransformRotate90);
}
image.Save("C:\\target.jpg", GetEncoder(sourceFormat), encoderParams);
} finally {
if (encoderParams != null)
encoderParams.Dispose();
}
}
katları olsun veya olmasın, hiç döndürmek için benim JPEG testi görüntülerin herhangi neden alamıyorum NET'te bir JPEG'i 90 derece artışlarla, yukarıdaki yöntemlerden veya başka bir yöntemden herhangi birini kullanarak minimum düzeyde veya hiç kalite kaybı olmadan nasıl başarılı bir şekilde döndürülebilir? Teşekkürler.
Ayrıca burada GetEncoder
benim uygulama görebilirsiniz:
private ImageCodecInfo GetEncoder(ImageFormat format) {
foreach (var info in ImageCodecInfo.GetImageEncoders())
if (info.FormatID == format.Guid)
return info;
return null;
}
Düzenleme: daha iyi benim gerçek kod eşleşecek şekilde yukarıdaki kodu güncellenmiş
. hata aşağıdaki satırda oldu: O olmalıydı
if (sourceFormat == ImageFormat.Jpeg) {
: my yayınlanan kod çalıştı teyit için
if (sourceFormat.Guid == ImageFormat.Jpeg.Guid) {
Kodunuz benim için çalışıyor .. Verileriniz için bir ImageCodecInfo döndüğünden emin misiniz? –
Teşekkürler @pb, bir ImageCodecInfo alıyorum ama bir encoderParams alıyorum çünkü benim gerçek kod bir hata vardı ayarlamadan önce ek bir kontrol vardı. –