Обрезка и сохранение картинки

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 125
Благодарностей
196
Баллы
63
Всем привет
Нужно сначала сохранить картинку в файл с Html, затем перевести ее в base64
Пробую так:
C#:
string saveLocation = project.Directory + @"\Screen\";
   
    HtmlElement QR_code = tab.FindElementByXPath("//div[contains(@class, 'qr-code__value')]",0);
   
    int pX = QR_code.BoundingClientHeight;
    int pY = QR_code.BoundingClientWidth;
    int Height = QR_code.Height;
    int Width = QR_code.Width;
    project.SendInfoToLog("pX,pY,Height,Width - " + pX + "," + pY + "," + Width + "," + Height,false);
   
    Bitmap source;
   
    Rectangle section = new Rectangle(pX, pY, Width, Height);
   
    using (MemoryStream mstream = new MemoryStream(File.ReadAllBytes(saveLocation)))
        source = new Bitmap(Image.FromStream(mstream));
   
    Bitmap img = JobClasses.CommonCode.CropImage(source, section);
   
    string img_name1 = "test.jpg";
    string img_name2 = "test1.jpg";
   
    string savePath2 = project.Directory + @"\Screen\" + img_name1;
    img.Save(savePath2);
    project.SendInfoToLog("savePath2 - " + savePath2,false);
   
    string file = savePath2;
    // В лог вернет сконвертированную картинку в base64
    string photoCode = Convert.ToBase64String(System.IO.File.ReadAllBytes(file));
    project.SendInfoToLog("photoCode - " + photoCode,false);
   
    string base64str = photoCode;
    File.WriteAllBytes(@"C:\Клиентам\.....\Screen\" + img_name2, Convert.FromBase64String(base64str));
Но! происходит ошибка, что не может найти часть пути.
Вот она:
Тип Время Сообщение
10:42:33 " Не удалось найти часть пути ""C:\Клиентам\.....\Screen\"".
в System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
в System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
в System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
в System.IO.File.InternalReadAllBytes(String path, Boolean checkHost)
в ZennoLab.OwnCode.C5b476c8579df4eeba53d972a05878558.M5b476c8579df4eeba53d972a05878558(IZennoPosterProjectModel project, Instance instance) в C:\Users\vinil\AppData\Local\Temp\CompilerFolder\ProjectMaker\A181e5dfea77a4a3a9284be7124da30e6\t5wlsped.84.cs:строка 79"

или кратко:

Тип Время Сообщение
10:42:33 Выполнение действия CSharp OwnCode: Скрин. Не удалось найти часть пути "C:\Клиентам\......\Screen\".

Что я не так делаю?
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 694
Баллы
113

djaga

Client
Регистрация
26.04.2020
Сообщения
505
Благодарностей
1 054
Баллы
93
Всем привет
Нужно сначала сохранить картинку в файл с Html, затем перевести ее в base64
Пробую так:
C#:
string saveLocation = project.Directory + @"\Screen\";

    HtmlElement QR_code = tab.FindElementByXPath("//div[contains(@class, 'qr-code__value')]",0);

    int pX = QR_code.BoundingClientHeight;
    int pY = QR_code.BoundingClientWidth;
    int Height = QR_code.Height;
    int Width = QR_code.Width;
    project.SendInfoToLog("pX,pY,Height,Width - " + pX + "," + pY + "," + Width + "," + Height,false);

    Bitmap source;

    Rectangle section = new Rectangle(pX, pY, Width, Height);

    using (MemoryStream mstream = new MemoryStream(File.ReadAllBytes(saveLocation)))
        source = new Bitmap(Image.FromStream(mstream));

    Bitmap img = JobClasses.CommonCode.CropImage(source, section);

    string img_name1 = "test.jpg";
    string img_name2 = "test1.jpg";

    string savePath2 = project.Directory + @"\Screen\" + img_name1;
    img.Save(savePath2);
    project.SendInfoToLog("savePath2 - " + savePath2,false);

    string file = savePath2;
    // В лог вернет сконвертированную картинку в base64
    string photoCode = Convert.ToBase64String(System.IO.File.ReadAllBytes(file));
    project.SendInfoToLog("photoCode - " + photoCode,false);

    string base64str = photoCode;
    File.WriteAllBytes(@"C:\Клиентам\.....\Screen\" + img_name2, Convert.FromBase64String(base64str));
Но! происходит ошибка, что не может найти часть пути.
Вот она:
Тип Время Сообщение
10:42:33 " Не удалось найти часть пути ""C:\Клиентам\.....\Screen\"".
в System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
в System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
в System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
в System.IO.File.InternalReadAllBytes(String path, Boolean checkHost)
в ZennoLab.OwnCode.C5b476c8579df4eeba53d972a05878558.M5b476c8579df4eeba53d972a05878558(IZennoPosterProjectModel project, Instance instance) в C:\Users\vinil\AppData\Local\Temp\CompilerFolder\ProjectMaker\A181e5dfea77a4a3a9284be7124da30e6\t5wlsped.84.cs:строка 79"

или кратко:

Тип Время Сообщение
10:42:33 Выполнение действия CSharp OwnCode: Скрин. Не удалось найти часть пути "C:\Клиентам\......\Screen\".

Что я не так делаю?
Не понятно зачем вы как-то дважды сохраняете файл.
Поэтому прислал вам свой пример ниже, чтобы показать как можно проще.

*Для примера нужно, чтобы была рядом с шаблоном папка Screen

Сохранение скриншота и конвертация в Base64:
Tab tab = instance.ActiveTab; // В примере отсутствовало

string img_name1 = "test.jpg"; // имя файла
string saveLocation = project.Directory + @"\Screen\" + img_name1; // путь куда сохранять
string xPath = "(//div[contains(@class,"MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation3")])[2]"; // путь к qrCode

HtmlElement elByXPath = tab.FindElementByXPath(xPath,0); // найти на странице

// сделать скриншот с размерами ↓
ZennoPoster.ImageProcessingCropFromScreenshot(instancePort: instance.Port,
                                              savePath: saveLocation,
                                              leftBorder: elByXPath.DisplacementInBrowser.X,
                                              topBorder: elByXPath.DisplacementInBrowser.Y,
                                              cropWidth: elByXPath.Height,
                                              cropHeight: elByXPath.Width,
                                              units: "pixel",
                                              quality: 70,
                                              exif: string.Empty);

string base64Photo = Convert.ToBase64String(File.ReadAllBytes(saveLocation)); // конвертация в Base64
project.SendInfoToLog("photoCode :\n" + base64Photo, false); // вывод в лог base64Photo
Шаблон закрепил ↓.
 

Вложения

Последнее редактирование:
  • Спасибо
Реакции: Ilshakin и artsmm

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 125
Благодарностей
196
Баллы
63
Спасибо за помощь. А можете помочь вытащить qr код со страницы wildberries ,где оплата по qr коду идет? я его пытаюсь вытащить
Подставил ваш код, и xpath: //div[contains(@class, 'qr-code__value')], у меня нижняя часть срезается
94905
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)