LazZiya / ImageResize

Image resizing tool for .Net applications with ability to add text/image watermark, Supports animated images as well.
http://docs.ziyad.info
MIT License
66 stars 16 forks source link

Image resizing exception: System.PlatformNotSupportedException: System.Drawing.Common is not supported on this platform. #21

Open sunsiz opened 6 months ago

sunsiz commented 6 months ago

Describe the bug When running on Linux the Scale method throw: "Image resizing exception: System.PlatformNotSupportedException: System.Drawing.Common is not supported on this platform." exception. As in docs explained I have installed libc6-dev and libgdiplus libraries.

There is also another issue if path is contains backslash like this: Path.Combine(webRootPath, @"images\artist"); it will throw directory not found exception on Linux, as a workaround I have changed the backslash to forward slash it worked.

To Reproduce Steps to reproduce the behavior:

  1. Run the application on Linux
  2. Scale an image while uploading
  3. If not debugging or on server you can see the errors in logs.

Expected behavior ***** Image resizing exception: System.PlatformNotSupportedException: System.Drawing.Common is not supported on this platform. at System.Drawing.Image.FromStream(Stream stream)

Screenshots If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

Smartphone (please complete the following information):

Additional context Example code block looks like this:

var uploads = Path.Combine(webRootPath, @"images/artist");
var fileName = file.FileName;
var namePart = fileName.Remove(fileName.LastIndexOf('.'));
var extension = fileName.Substring(fileName.LastIndexOf('.'));
using var fileStream = new FileStream(Path.Combine(uploads, fileName), FileMode.Create);
file.CopyTo(fileStream);
using var img = Image.FromStream(fileStream);
img.Scale(384, 384).SaveAs(Path.Combine(uploads, namePart + "-384" + extension));
LazZiya commented 6 months ago

Which .net version you are using?

LazZiya.ImageResize depends on System.Drawing.Common starting .net6 it is only supported on windows, due to numerous issues reported to libgdiplus that never got fixed!

sunsiz commented 6 months ago

Oh, I used .net 8.0. Is there any other known workaround for it?

LazZiya commented 6 months ago

Not sure if this will work; create a class library project targeting lower .net framework and install ImageResize nuget. Then add a reference to your project!?