diff --git a/CertReports.Syncfusion/Controllers/ChartController.cs b/CertReports.Syncfusion/Controllers/ChartController.cs index 38220d2..24e1665 100644 --- a/CertReports.Syncfusion/Controllers/ChartController.cs +++ b/CertReports.Syncfusion/Controllers/ChartController.cs @@ -112,17 +112,26 @@ public class ChartController : ControllerBase }); } - byte[] pngBytes = SkiaChartRendererV2.RenderToPng(chartData, width, height); + bool isJpeg = format.Equals("jpg", StringComparison.OrdinalIgnoreCase) + || format.Equals("jpeg", StringComparison.OrdinalIgnoreCase); + + byte[] imgBytes = SkiaChartRendererV2.RenderToPng(chartData, width, height, jpeg: isJpeg); if (format.Equals("pdf", StringComparison.OrdinalIgnoreCase)) { - byte[] pdfBytes = WrapPngInPdf(pngBytes); + byte[] pdfBytes = WrapPngInPdf(imgBytes); Response.Headers.Append("Content-Disposition", $"inline; filename=chart_v2_{isin}.pdf"); return File(pdfBytes, "application/pdf"); } + if (isJpeg) + { + Response.Headers.Append("Content-Disposition", $"inline; filename=chart_v2_{isin}.jpg"); + return File(imgBytes, "image/jpeg"); + } + Response.Headers.Append("Content-Disposition", $"inline; filename=chart_v2_{isin}.png"); - return File(pngBytes, "image/png"); + return File(imgBytes, "image/png"); } catch (Exception ex) { diff --git a/CertReports.Syncfusion/Services/Implementations/SkiaChartRendererV2.cs b/CertReports.Syncfusion/Services/Implementations/SkiaChartRendererV2.cs index 5b34ed8..6fa6f5a 100644 --- a/CertReports.Syncfusion/Services/Implementations/SkiaChartRendererV2.cs +++ b/CertReports.Syncfusion/Services/Implementations/SkiaChartRendererV2.cs @@ -42,7 +42,7 @@ public static class SkiaChartRendererV2 // Entry point // ═══════════════════════════════════════════════════════════════════ - public static byte[] RenderToPng(ChartDataV2 data, int width = 1100, int height = 700) + public static byte[] RenderToPng(ChartDataV2 data, int width = 1100, int height = 700, bool jpeg = false) { using var surface = SKSurface.Create(new SKImageInfo(width, height)); var canvas = surface.Canvas; @@ -164,8 +164,10 @@ public static class SkiaChartRendererV2 DrawLegendBottom(canvas, plotArea, allLegend, width); using var image = surface.Snapshot(); - using var pngData = image.Encode(SKEncodedImageFormat.Png, 95); - return pngData.ToArray(); + using var imgData = jpeg + ? image.Encode(SKEncodedImageFormat.Jpeg, 90) + : image.Encode(SKEncodedImageFormat.Png, 95); + return imgData.ToArray(); } // ═══════════════════════════════════════════════════════════════════