feat: add JPEG support to /api/chart/v2 (?format=jpg|jpeg)
This commit is contained in:
@@ -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))
|
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");
|
Response.Headers.Append("Content-Disposition", $"inline; filename=chart_v2_{isin}.pdf");
|
||||||
return File(pdfBytes, "application/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");
|
Response.Headers.Append("Content-Disposition", $"inline; filename=chart_v2_{isin}.png");
|
||||||
return File(pngBytes, "image/png");
|
return File(imgBytes, "image/png");
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ public static class SkiaChartRendererV2
|
|||||||
// Entry point
|
// 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));
|
using var surface = SKSurface.Create(new SKImageInfo(width, height));
|
||||||
var canvas = surface.Canvas;
|
var canvas = surface.Canvas;
|
||||||
@@ -164,8 +164,10 @@ public static class SkiaChartRendererV2
|
|||||||
DrawLegendBottom(canvas, plotArea, allLegend, width);
|
DrawLegendBottom(canvas, plotArea, allLegend, width);
|
||||||
|
|
||||||
using var image = surface.Snapshot();
|
using var image = surface.Snapshot();
|
||||||
using var pngData = image.Encode(SKEncodedImageFormat.Png, 95);
|
using var imgData = jpeg
|
||||||
return pngData.ToArray();
|
? image.Encode(SKEncodedImageFormat.Jpeg, 90)
|
||||||
|
: image.Encode(SKEncodedImageFormat.Png, 95);
|
||||||
|
return imgData.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ═══════════════════════════════════════════════════════════════════
|
// ═══════════════════════════════════════════════════════════════════
|
||||||
|
|||||||
Reference in New Issue
Block a user