Anonymous
Инициализатор типа для «Gdip» выдал исключение, когда я запускаю свой код на сервере
Сообщение
Anonymous » 23 июл 2024, 03:56
Код: Выделить всё
public async Task Handle(UploadImageRequest request, CancellationToken cancellationToken)
{
try
{
if (request.Files == null || request.Files.Count == 0)
{
throw new Exception("No files uploaded.");
}
if (request.Watermark == null)
{
throw new Exception("Watermark image is missing.");
}
var uploadedImagePaths = new List();
float opacity = ParseOpacity(request.Opacity);
using (var watermarkStream = new MemoryStream())
{
await request.Watermark.CopyToAsync(watermarkStream);
using (var watermarkImage = Image.FromStream(watermarkStream))
{
foreach (var file in request.Files)
{
string name = null;
try
{
name = Path.GetFileName(file.FileName);
}
catch
{
throw new Exception("Name");
}
if (name != null)
{
bool gdiPlusInstalled = GdiPlusCheck.IsGdiPlusInstalled();
if (gdiPlusInstalled)
{
}
else
{
}
using (var stream = new MemoryStream())
{
await file.CopyToAsync(stream);
using (var uploadedImage = Image.FromStream(stream))
using (var mergedImage = new Bitmap(uploadedImage.Width, uploadedImage.Height))
using (var graphic = Graphics.FromImage(mergedImage))
{
graphic.DrawImage(uploadedImage, 0, 0);
graphic.CompositingMode = CompositingMode.SourceOver;
var watermarkAttributes = new ImageAttributes();
watermarkAttributes.SetColorMatrix(new ColorMatrix { Matrix33 = opacity });
var watermarkWidth = (int)(uploadedImage.Width * 0.25);
var watermarkHeight = (int)(watermarkImage.Height * ((float)watermarkWidth / watermarkImage.Width));
var x = request.WaterMarkPosition switch
{
WaterMarkPosition.TopLeft => 0,
WaterMarkPosition.TopRight => uploadedImage.Width - watermarkWidth,
WaterMarkPosition.BottomLeft => 0,
WaterMarkPosition.BottomRight => uploadedImage.Width - watermarkWidth,
WaterMarkPosition.LeftMiddle => 0,
WaterMarkPosition.RightMiddle => uploadedImage.Width - watermarkWidth,
_ => (uploadedImage.Width - watermarkWidth) / 2,
};
var y = request.WaterMarkPosition switch
{
WaterMarkPosition.TopLeft => 0,
WaterMarkPosition.TopRight => 0,
WaterMarkPosition.BottomLeft => uploadedImage.Height - watermarkHeight,
WaterMarkPosition.BottomRight => uploadedImage.Height - watermarkHeight,
WaterMarkPosition.TopMiddle => 0,
WaterMarkPosition.BottomMiddle => uploadedImage.Height - watermarkHeight,
_ => (uploadedImage.Height - watermarkHeight) / 2,
};
graphic.DrawImage(watermarkImage, new Rectangle(x, y, watermarkWidth, watermarkHeight), 0, 0, watermarkImage.Width, watermarkImage.Height, GraphicsUnit.Pixel, watermarkAttributes);
using (var ms = new MemoryStream())
{
mergedImage.Save(ms, ImageFormat.Png);
var imageData = ms.ToArray();
try
{
var imageUrl = await _blobStorageService.UploadFileAsync(name, imageData);
uploadedImagePaths.Add(imageUrl);
}
catch
{
throw new Exception("Strorage");
}
}
}
}
}
}
}
}
return new Response(uploadedImagePaths);
}
}
При запуске на сервере я получаю это исключение. Я не понимаю, как устранить эту ошибку.
Подробнее здесь:
https://stackoverflow.com/questions/784 ... de-in-serv
1721696172
Anonymous
[code]public async Task Handle(UploadImageRequest request, CancellationToken cancellationToken) { try { if (request.Files == null || request.Files.Count == 0) { throw new Exception("No files uploaded."); } if (request.Watermark == null) { throw new Exception("Watermark image is missing."); } var uploadedImagePaths = new List(); float opacity = ParseOpacity(request.Opacity); using (var watermarkStream = new MemoryStream()) { await request.Watermark.CopyToAsync(watermarkStream); using (var watermarkImage = Image.FromStream(watermarkStream)) { foreach (var file in request.Files) { string name = null; try { name = Path.GetFileName(file.FileName); } catch { throw new Exception("Name"); } if (name != null) { bool gdiPlusInstalled = GdiPlusCheck.IsGdiPlusInstalled(); if (gdiPlusInstalled) { } else { } using (var stream = new MemoryStream()) { await file.CopyToAsync(stream); using (var uploadedImage = Image.FromStream(stream)) using (var mergedImage = new Bitmap(uploadedImage.Width, uploadedImage.Height)) using (var graphic = Graphics.FromImage(mergedImage)) { graphic.DrawImage(uploadedImage, 0, 0); graphic.CompositingMode = CompositingMode.SourceOver; var watermarkAttributes = new ImageAttributes(); watermarkAttributes.SetColorMatrix(new ColorMatrix { Matrix33 = opacity }); var watermarkWidth = (int)(uploadedImage.Width * 0.25); var watermarkHeight = (int)(watermarkImage.Height * ((float)watermarkWidth / watermarkImage.Width)); var x = request.WaterMarkPosition switch { WaterMarkPosition.TopLeft => 0, WaterMarkPosition.TopRight => uploadedImage.Width - watermarkWidth, WaterMarkPosition.BottomLeft => 0, WaterMarkPosition.BottomRight => uploadedImage.Width - watermarkWidth, WaterMarkPosition.LeftMiddle => 0, WaterMarkPosition.RightMiddle => uploadedImage.Width - watermarkWidth, _ => (uploadedImage.Width - watermarkWidth) / 2, }; var y = request.WaterMarkPosition switch { WaterMarkPosition.TopLeft => 0, WaterMarkPosition.TopRight => 0, WaterMarkPosition.BottomLeft => uploadedImage.Height - watermarkHeight, WaterMarkPosition.BottomRight => uploadedImage.Height - watermarkHeight, WaterMarkPosition.TopMiddle => 0, WaterMarkPosition.BottomMiddle => uploadedImage.Height - watermarkHeight, _ => (uploadedImage.Height - watermarkHeight) / 2, }; graphic.DrawImage(watermarkImage, new Rectangle(x, y, watermarkWidth, watermarkHeight), 0, 0, watermarkImage.Width, watermarkImage.Height, GraphicsUnit.Pixel, watermarkAttributes); using (var ms = new MemoryStream()) { mergedImage.Save(ms, ImageFormat.Png); var imageData = ms.ToArray(); try { var imageUrl = await _blobStorageService.UploadFileAsync(name, imageData); uploadedImagePaths.Add(imageUrl); } catch { throw new Exception("Strorage"); } } } } } } } } return new Response(uploadedImagePaths); } } [/code] При запуске на сервере я получаю это исключение. Я не понимаю, как устранить эту ошибку. Подробнее здесь: [url]https://stackoverflow.com/questions/78476610/the-type-initializer-for-gdip-threw-an-exception-when-i-am-run-my-code-in-serv[/url]