Эмуляция "Сохранить картинку как..."

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 088
Благодарностей
126
Баллы
63
Как в браузере через эмуляцию клавиатуры (правой кнопки мыши) сделать (скачать) "Сохранить картинку как...".
Еще не понятно в разных браузерах в контекстном меню эта опция на разных местах по счету сверху.

P.S. Этот способ сохранения картинки выбрал, потому-что должен сохранять с прозрачным фоном PNG.
Другие способы (через капчу, Bitmap.Save) прозрачный фон теряют.
 

Вложения

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
сохранить через js + canvas (искать ответ в интернете)
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 542
Баллы
113
Вариант #1:


Вариант #2:
 
Последнее редактирование:
  • Спасибо
Реакции: fri-lancer

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 088
Благодарностей
126
Баллы
63
Последнее редактирование модератором:

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 542
Баллы
113
"правой кнопкой мыши" ---> "Сохранить картинку как" сохраняет с прозрачным фоном как и нужно в png, а в предложенных почему-то с черным фоном.
Все два предложенных варианта сохраняют изображение "как есть". В данном случае с прозрачным фоном.
Для данного примера варианты сохранения через GET запрос и обработку изображений не подходят т.к. это Canvas, а не файл.
В этой ситуации поможет только JavaScript.
 

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 088
Благодарностей
126
Баллы
63

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 542
Баллы
113
Написал небольшой шаблон сохранения Canvas в PNG.
@bizzon, пользуйтесь :-)
 

Вложения

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 088
Благодарностей
126
Баллы
63

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 650
Благодарностей
1 318
Баллы
113
Написал небольшой шаблон сохранения Canvas в PNG.
пользуйтесь :-)

Спасибо за идею, на основе вашего шаблона написал код в одном C# кубике))) Может нужен кому то будет.

C#:
//Через браузер сохранения Canvas в PNG.
string fileName = project.Variables["nameFile"].Value; // Имя файла например Cap_1
string PathFolder = @"\captcha\"; // Путь к папке captcha можно не трогать, папка создастся сама
if (!Directory.Exists(project.Directory + PathFolder)) // Проверяем существование папки captcha
    {
        Directory.CreateDirectory(project.Directory + PathFolder); // Если папки captcha нету, мы ее создаем
    }
string convas = instance.ActiveTab.MainDocument.EvaluateScript("return document.getElementsByTagName(\"canvas\")[0].toDataURL();");
string base64Image = convas.Replace("data:image/png;base64,", "");
string destinationImgPath = string.Format(@"{0}{1}.png", project.Directory + PathFolder, fileName);

var bytes = Convert.FromBase64String(base64Image);
using (var imageFile = new FileStream(destinationImgPath, FileMode.Create))
{
    imageFile.Write(bytes, 0, bytes.Length);
    imageFile.Flush();
}
 
Последнее редактирование:
  • Спасибо
Реакции: Master4eg и bizzon

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
Спасибо за идею, на основе вашего шаблона написал код в одном C# кубике))) Может нужен кому то будет.

C#:
//Через браузер сохранения Canvas в PNG.
string fileName = project.Variables["nameFile"].Value; // Имя файла например Cap_1
string PathFolder = @"\captcha\"; // Путь к папке captcha можно не трогать, папка создастся сама
if (!Directory.Exists(project.Directory + PathFolder)) // Проверяем существование папки captcha
    {
        Directory.CreateDirectory(project.Directory + PathFolder); // Если папки captcha нету, мы ее создаем
    }
string convas = instance.ActiveTab.MainDocument.EvaluateScript("return document.getElementsByTagName(\"canvas\")[0].toDataURL();");
string base64Image = convas.Replace("data:image/png;base64,", "");
string destinationImgPath = string.Format(@"{0}{1}.png", project.Directory + PathFolder, fileName);

var bytes = Convert.FromBase64String(base64Image);
using (var imageFile = new FileStream(destinationImgPath, FileMode.Create))
{
    imageFile.Write(bytes, 0, bytes.Length);
    imageFile.Flush();
}
Flush вызывать не надо, так как using эту работу берет на себя и Directory.CreateDirectory вроде бы сам проверяет наличие и если что создает
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
Flush вызывать не надо, так как using эту работу берет на себя и Directory.CreateDirectory вроде бы сам проверяет наличие и если что создает
Directory.CreateDirectory создаёт, но не проверяет
 

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