Доброго времени суток!
У меня куча изображений. Заливаются на сайт, по одному, там к ним применяется шаблон и скачивается измененное.
Каждый шаблон требует разные размеры.
Я в C# меняю размеры под требуемые. Сохраняю в папку temp. Код изменения размера и обрезки изображения внизу.
Производятся необходимые деиствия.
После чего в цикле удаляю все изображения созданные в папке temp.
Первый цикл применяется для удаления скачанных(измененных) изображений. Я их переименовываю, копирую И храню отдельно
Второй цикл удаляет все обрезки созданные для загрузки Изображения. Вот он то и выдает ошибку. Причем, он может удалить нормально обрезки после 10 изображений (тоесть происходит полный цикл работы моего шаблона 10 раз: берется изображение, изменяется размер, обрезается на разные ласкутки, загружается на сайт, применяется к шаблону сайта, Скачивается новое изображение, удалется все из папок temp) а на 11( или 15) раз выдает ошибку "Выполнение действия CSharp OwnCode: Delete Temp Files. Процесс не может получить доступ к файлу "D:\Projects\ResizeImage\Images\temp\Bouteille isotherme berculbor - Somydrink™-resize-0.jpg", так как этот файл используется другим процессом."
Надеюсь, понятно обьяснил.
Тоесть блок Crop Image не освобождает использованное для своих нужд изображение (метод .Dispose()
Как можно исправить ситуацию.
У меня куча изображений. Заливаются на сайт, по одному, там к ним применяется шаблон и скачивается измененное.
Каждый шаблон требует разные размеры.
Я в C# меняю размеры под требуемые. Сохраняю в папку temp. Код изменения размера и обрезки изображения внизу.
C#:
/**********************************Resized Image for Same size sides*************************/
project.SendInfoToLog("/************************** Resized Image for Same size sides ***********************************/", true);
string pathToImage = project.Variables["ImagesName"].Value;
Bitmap resizedBitmap = new Bitmap(System.Drawing.Image.FromFile(pathToImage));
int size = 0;
if (x!=0){
size = Convert.ToInt32(project.Variables["Width"].Value);
}else{
size = Convert.ToInt32(project.Variables["Height"].Value);
}
Bitmap newBitmap = new Bitmap(resizedBitmap,new Size(size, size));
string savePathImg = project.Directory+@"\Images\temp\"+project.Variables["shortName"].Value+"-resize-"+Convert.ToString(i)+".jpg";
if (System.IO.File.Exists(savePathImg)){
System.IO.File.Delete(savePathImg);
}
project.SendInfoToLog("From Images: "+pathToImage, true);
project.Variables["fullPathToResizedImage"].Value = savePathImg;
newBitmap.Save(savePathImg, System.Drawing.Imaging.ImageFormat.Jpeg);
project.SendInfoToLog("File Path for Save: "+savePathImg, true);
resizedBitmap.Dispose();
newBitmap.Dispose();
/***************************** End Resized Image for Same size sides*************************/
/**************************************** Crop Image ************************************************/
project.SendInfoToLog("/************************** Crop Image ***********************************/", true);
pathToImage = project.Variables["fullPathToResizedImage"].Value;
Bitmap croppedBitmap = new Bitmap(System.Drawing.Image.FromFile(pathToImage));
System.Drawing.Imaging.PixelFormat format = croppedBitmap.PixelFormat;
Bitmap croppedBitmap2 = croppedBitmap.Clone(new Rectangle(x,y,Convert.ToInt32(project.Variables["Height"].Value), Convert.ToInt32(project.Variables["Width"].Value)), format);
savePathImg = project.Directory+@"\Images\temp\"+project.Variables["shortName"].Value+"-crop-"+Convert.ToString(i)+".jpg";
project.SendInfoToLog("File Path for Save: "+savePathImg, true);
project.Variables["fullPathToResizedImage"].Value = savePathImg;
croppedBitmap2.Save(savePathImg, System.Drawing.Imaging.ImageFormat.Jpeg);
croppedBitmap.Dispose();
croppedBitmap2.Dispose();
/**************************************** End Crop Image ************************************************/
Производятся необходимые деиствия.
После чего в цикле удаляю все изображения созданные в папке temp.
C#:
string[] AllFiles = Directory.GetFiles(project.Directory+"\\ResultImage\\temp","*.png", SearchOption.AllDirectories);
foreach (string filename in AllFiles)
{
File.Delete(filename);
}
AllFiles = Directory.GetFiles(project.Directory+"\\Images\\temp","*.*", SearchOption.AllDirectories);
foreach (string filename in AllFiles)
{
File.Delete(filename);
}
Первый цикл применяется для удаления скачанных(измененных) изображений. Я их переименовываю, копирую И храню отдельно
Второй цикл удаляет все обрезки созданные для загрузки Изображения. Вот он то и выдает ошибку. Причем, он может удалить нормально обрезки после 10 изображений (тоесть происходит полный цикл работы моего шаблона 10 раз: берется изображение, изменяется размер, обрезается на разные ласкутки, загружается на сайт, применяется к шаблону сайта, Скачивается новое изображение, удалется все из папок temp) а на 11( или 15) раз выдает ошибку "Выполнение действия CSharp OwnCode: Delete Temp Files. Процесс не может получить доступ к файлу "D:\Projects\ResizeImage\Images\temp\Bouteille isotherme berculbor - Somydrink™-resize-0.jpg", так как этот файл используется другим процессом."
Надеюсь, понятно обьяснил.
Тоесть блок Crop Image не освобождает использованное для своих нужд изображение (метод .Dispose()
Как можно исправить ситуацию.