1- using ImageMagick ;
1+ using SixLabors . ImageSharp ;
2+ using SixLabors . ImageSharp . Formats . Jpeg ;
3+ using SixLabors . ImageSharp . Formats . Png ;
4+ using SixLabors . ImageSharp . PixelFormats ;
5+ using SixLabors . ImageSharp . Processing ;
6+
7+ using System ;
8+ using System . IO ;
29using Telerik . Windows . Documents . Extensibility ;
310using Telerik . Windows . Documents . Fixed . FormatProviders . Pdf . Export ;
411
512namespace CustomJpegImageConverter
613{
14+
15+ // SixLabors.ImageSharp 3.1.12
16+ // SixLabors.ImageSharp.Drawing 2.1.7
17+
718 internal class CustomJpegImageConverter : JpegImageConverterBase
819 {
920 public override bool TryConvertToJpegImageData ( byte [ ] imageData , ImageQuality imageQuality , out byte [ ] jpegImageData )
1021 {
11- IMagickFormatInfo formatInfo = MagickFormatInfo . Create ( imageData ) ;
12- if ( formatInfo != null && formatInfo . SupportsReading )
22+ jpegImageData = null ;
23+
24+ try
1325 {
14- using ( MagickImage magickImage = new MagickImage ( imageData ) )
26+ using ( var imageStream = new MemoryStream ( imageData ) )
1527 {
16- magickImage . Alpha ( AlphaOption . Remove ) ;
17- magickImage . Quality = ( uint ) imageQuality ;
28+ Image image = Image . Load ( imageStream ) ;
29+ var imageFormat = image . Metadata . DecodedImageFormat ;
30+
31+ // Handle transparency for PNG
32+ if ( imageFormat is PngFormat && image . PixelType . BitsPerPixel == 32 )
33+ {
34+ var background = new Image < Rgba32 > ( image . Width , image . Height , Color . White ) ;
35+ background . Mutate ( ctx => ctx . DrawImage ( image , 1f ) ) ;
36+
37+ image . Dispose ( ) ; // Dispose original
38+ image = background ; // Assign new image
39+ }
40+
41+ var jpegEncoder = new JpegEncoder
42+ {
43+ Quality = ( int ) imageQuality
44+ } ;
1845
19- jpegImageData = magickImage . ToByteArray ( MagickFormat . Jpeg ) ;
46+ using ( var ms = new MemoryStream ( ) )
47+ {
48+ image . Save ( ms , jpegEncoder ) ;
49+ jpegImageData = ms . ToArray ( ) ;
50+ }
51+
52+ image . Dispose ( ) ; // Dispose final image
2053 }
2154
2255 return true ;
2356 }
57+ catch ( SixLabors . ImageSharp . UnknownImageFormatException )
58+ {
59+ return false ;
60+ }
61+ catch ( SixLabors . ImageSharp . ImageProcessingException )
62+ {
63+ return false ;
64+ }
65+ catch ( Exception )
66+ {
67+ return false ;
68+ }
2469
25- jpegImageData = null ;
26- return false ;
2770 }
2871 }
2972}
0 commit comments