55 lines
2.3 KiB
C#
55 lines
2.3 KiB
C#
using ImageMagick;
|
|
using System.Drawing;
|
|
using System.Drawing.Imaging;
|
|
|
|
namespace PDFWorkflowManager
|
|
{
|
|
public static class ImageService
|
|
{
|
|
public static void ConvertToJpeg(string sourceFileName, string destinationFileName, int compressionLevel, int dpi = 300)
|
|
{
|
|
using (Image sourceImage = Image.FromFile(sourceFileName))
|
|
{
|
|
float scaleFactor = dpi / sourceImage.HorizontalResolution;
|
|
int newWidth = (int)(sourceImage.Width * scaleFactor);
|
|
int newHeight = (int)(sourceImage.Height * scaleFactor);
|
|
|
|
using (var newImage = new Bitmap(newWidth, newHeight))
|
|
{
|
|
newImage.SetResolution(dpi, dpi);
|
|
using (Graphics graphics = Graphics.FromImage(newImage))
|
|
{
|
|
graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
|
|
graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
|
|
graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
|
|
graphics.DrawImage(sourceImage, 0, 0, newWidth, newHeight);
|
|
}
|
|
EncoderParameters encoderParameters = new EncoderParameters(1);
|
|
encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, compressionLevel);
|
|
ImageCodecInfo jpegCodec = GetEncoderInfo(ImageFormat.Jpeg);
|
|
newImage.Save(destinationFileName, jpegCodec, encoderParameters);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static ImageCodecInfo GetEncoderInfo(ImageFormat format)
|
|
{
|
|
foreach (ImageCodecInfo codec in ImageCodecInfo.GetImageDecoders())
|
|
{
|
|
if (codec.FormatID == format.Guid)
|
|
return codec;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public static void CreateThumbnail(string fileName, string outputPath)
|
|
{
|
|
using (var image = new MagickImage(fileName))
|
|
{
|
|
var size = new MagickGeometry(240, 340) { IgnoreAspectRatio = false };
|
|
image.Resize(size);
|
|
image.Write(outputPath);
|
|
}
|
|
}
|
|
}
|
|
} |