На данный вопрос уже ответили:
Данный код кропает картинку по нижней части. Сохраненять в файл с тем же названием не дает из-за ошибки использования файла. Поэтому я создал временный файл с расширением tmp. Проблема возникает при удалении - из-за того что ресурс fileName занят. Как его правильно его освободить?
byte[] photoBytes = File.ReadAllBytes(fileName); // для чтения
FileStream fs = File.OpenWrite(fileName+".tmp"); // для записи
using (MemoryStream inStream = new MemoryStream(photoBytes))
{
using (MemoryStream outStream = new MemoryStream())
{
using (ImageFactory imageFactory = new ImageFactory(preserveExifData: true))
{
Image tmp = new Bitmap(Image.FromFile(fileName));
imageFactory.Load(inStream) // грузим картинку
.Crop(new Rectangle(0, 0, tmp.Width, tmp.Height - 62))
.Save(outStream); // сохраняем в поток
outStream.WriteTo(fs); // записываем в файл
outStream.Close(); // не забываем закрывать потоки ввода-вывода
}
inStream.Close(); // не забываем закрывать потоки ввода-вывода
fs.Close();
}
}
File.Delete(fileName);
File.Move(fileName+".tmp", fileName);
Зачем так много всего, если это простой Crop. Попробуйте так:
string fileName = "2.png";
byte[] photoBytes = File.ReadAllBytes(fileName); // для чтения
using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite)) // для записи
{
using (MemoryStream inStream = new MemoryStream(photoBytes))
{
ImageFactory imageFactory = new ImageFactory(true);
var tmp = Image.FromStream(fs);
var cropImg = imageFactory.Load(inStream).Crop(new Rectangle(0, 0, tmp.Width, tmp.Height - 300));
inStream.Position = 0;
cropImg.Save(inStream);
fs.Position = 0;
inStream.CopyTo(fs);
}
}
Я бы ещё проще сделал:
public static void Main(string[] args)
{
string fileName = "5.png";
byte[] photoBytes = File.ReadAllBytes(fileName);
using (FileStream fs = File.Open(fileName, FileMode.Open, FileAccess.ReadWrite))
{
ImageFactory imageFactory = new ImageFactory(true);
var tmp = Image.FromStream(fs);
var cropImg = imageFactory.Load(photoBytes).Crop(new Rectangle(0, 0, tmp.Width, tmp.Height - 300));
fs.Position = 0;
cropImg.Save(fs);
}
}
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники