Чего я хочу добиться - это прочитать изображение JPEG с диска, изменить его размер (уменьшить разрешение) и вернуть полученное изображение в другой модуль, который собирается сохранить изображение в корзину AWS S3 ... запутался, должен ли я возвращать полученное изображение в byte[]
или MemoryStream
.
Я видел этот урок и написал следующую функцию, которая читает изображение, изменяет его размер и возвращаетрезультирующее изображение в byte[]
.
public byte[] GetResizedImage(string folderPath, string fileName)
{
// read the original image from disk
FileInfo originalImage = ReadFileFromDisk(folderPath, fileName);
// resize the image, set width to 640px and respect original aspect ratio
using (var image = Image.FromStream(originalImage.OpenRead()))
{
int newWidth = image.Width;
int newHeight = image.Height;
float aspectRatio = image.Width / image.Height;
if (image.Width > 640)
{
newWidth = 640;
newHeight = Convert.ToInt32(GlobalConstants.NoOfPixelsForImageResizing / aspectRatio);
}
// resize image
Image thumbnail = image.GetThumbnailImage(newWidth, newHeight, null, IntPtr.Zero);
using (var thumbnailStream = new MemoryStream())
{
thumbnail.Save(thumbnailStream, ImageFormat.Jpeg);
return thumbnailStream.ToArray(); // <-- return image in byte[]
}
}
}
Мне не ясно, имеет ли какое-то значение изменение вышеуказанного кода и возврат MemoryStream
вместо byte[]
? Если я изменю код для возврата MemoryStream
, тогда мне нужно изменить последние 3 строки на:
var thumbnailStream = new MemoryStream();
thumbnail.Save(thumbnailStream, ImageFormat.Jpeg);
return thumbnailStream;
Таким образом, я не смогу избавиться от MemoryStream
... не уверенесли это будет плохой практикой?
Причина этого вопроса заключается в том, что мой другой модуль, который сохраняет уменьшенное изображение в корзину S3, принимает входной файл как поток:
SavetoS3bucket(Stream image, string name)
{
// save image to S3 bucket
}
Так что мне не ясно, лучше ли мне передать Stream
или byte[]
вышеописанному методу?