画像のサイズを変更するこのメソッドを作成しましたが、透明なPNG画像の返された画像は黒い背景になります。 解決策は何ですか?Graphics.DrawImageを使用して、透明なPNG画像の背景を黒に変更します。
私はBitmap.MakeTransparent()
を試しましたが、Graphics.Clear()
も問題を解決できませんでした。 関連するすべての質問を確認しましたが、私の質問に対する有益な回答が見つかりませんでした。
public HttpResponseMessage ImageResizer(string path, int w,int h)
{
var imagePath = HttpContext.Current.Server.MapPath(path);
Bitmap image;
try
{
image = (Bitmap)System.Drawing.Image.FromFile(imagePath);
}
catch
{
HttpResponseMessage hrm = new HttpResponseMessage();
return hrm;
}
int originalWidth = image.Width;
int originalHeight = image.Height;
// New width and height based on aspect ratio
int newWidth = w;
int newHeight = h;
// Convert other formats (including CMYK) to RGB.
Bitmap newImage = new Bitmap(newWidth, newHeight, PixelFormat.Format24bppRgb);
// Draws the image in the specified size with quality mode set to HighQuality
using (Graphics graphics = Graphics.FromImage(newImage))
{
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.SmoothingMode = SmoothingMode.AntiAlias;
graphics.CompositingQuality = CompositingQuality.HighQuality;
graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
using (var attribute = new ImageAttributes())
{
attribute.SetWrapMode(WrapMode.TileFlipXY);
// draws the resized image to the bitmap
graphics.DrawImage(image, new Rectangle(0, 0, newImage.Width, newImage.Height), new Rectangle(0, 0, originalWidth, originalHeight), GraphicsUnit.Pixel);
}
}
// Get an ImageCodecInfo object that represents the PNG codec.
ImageCodecInfo imageCodecInfo = this.GetEncoderInfo(ImageFormat.Png);
// Create an Encoder object for the Quality parameter.
Encoder encoder = Encoder.Quality;
// Create an EncoderParameters object.
EncoderParameters encoderParameters = new EncoderParameters(1);
// Save the image as a PNG file with quality level.
EncoderParameter encoderParameter = new EncoderParameter(encoder, 10);
encoderParameters.Param[0] = encoderParameter;
var splitPath = imagePath.Split('.');
string newPath = splitPath[0] + "ss5.png";
newImage.Save(newPath, ImageFormat.Png);
MemoryStream memoryStream = new MemoryStream();
newImage.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Png);
HttpResponseMessage response = new HttpResponseMessage();
response.Content = new ByteArrayContent(memoryStream.ToArray());
response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("image/png");
response.Content.Headers.ContentLength = memoryStream.Length;
return response;
}
private ImageCodecInfo GetEncoderInfo(ImageFormat format)
{
return ImageCodecInfo.GetImageDecoders().SingleOrDefault(c => c.FormatID == format.Guid);
}
おかげで、それは素晴らしい作品。画像はブラウザのキャッシュから読み込まれていましたが、あなたの解決策は機能していないと思いました。ありがとう。 –