Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 12.04.2016, 10:34
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Heny,
1. Форма для письма имеет поле "Вы можете приложить файл до 5 Мб" - вот туда и можно вкладывать файл скриншота. Однако автоматизировать процесс без предварительного сохранения пользователем в файл на диск и последующего открытия файла в форме ввода у Вас навряд ли получится. Если дело принципа, то надо будет в эту форму добавить hidden-поле, в которое вкладывать бинарную матрицу скриншота, а при приёме на сервере содержимое этого поля сохранять в виде jpg-файла. Но (если это PHP), то не забудьте, что по-умолчанию там стоит ограничение post_max_size и upload_max_filesize, поэтому большой файл, созданный на Full HD дисплее вложить не получится (надо менять настройки сервера).

2. Я предлагаю Вам другой путь (более по-взрослому). Изображение (из которого делается скриншот) - это не просто слепок экрана, а изображение, которое полностью подконтрольно вашей программе. Оно формируется на основании установленных пользователем параметров).
Если Вы будете передавать готовый файл, то как минимум возникнет проблема плохого вида в случаях, когда картинка формировалась на маленьком экране, а просматирваться будет на большом (и наоборот).
Поэтому надо передавать не сам файл, а параметры формирования изображения. Сделать это можно в скрытых полях формы. Затем, из полученных данных Ваша программа должна полностью сформировать изображение на основании этих параметров.
Как вариант можно передавать не сами параметры, а готовую URL-ссылку, типа такого:
http://www.laminar.ru/create_picture/?p1=111&p2=222......
В таком случае у Вас еще появится дополнительный сервис: сформированную ссылку посетитель может послать своим друзьям/родственникам для рассмотрения. И изображение будет сформировано индивидуально для каждого разрешения экрана.

3. Не нашел кнопки закрытия форму. Надеюсь, потому что это тест. Иначе невозможно раздражает.
Ответить с цитированием
  #12 (permalink)  
Старый 12.04.2016, 13:36
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Heny
а как отправлять на сервер? типа такого: xhr.send(downimg); ?
Получите результат работы canvas, и если изображение большого размера, то можно в формате jpeg, но если не очень, то лучше по умолчанию - png, так как jpeg плох тем, что при каждом сохранении в этом формате он будет сжиматься повторно, то есть качество при каждом сохранении ухудшается.

var data = canvas.toDataURL('image/png')


где canvas, это ссылка на объект canvas.

Далее, если форма отправляется обычным способом, то можно поместить data в скрытое поле textarea с именем downimg, если же асинхронно, то значит xhr.send(downimg=data);

На сервере это надо преобразовать в изображение:

if($img = explode('base64,/', $_POST['downimg'])[1] AND $img = imagecreatefromstring(base64_decode($img))) {
    //здесь сохранение изображения из ресурса $img средствами GD, а как это сделать зависит от того как передается изображение в CMIMEMail
}
Ответить с цитированием
  #13 (permalink)  
Старый 13.04.2016, 08:34
Аспирант
Отправить личное сообщение для Heny Посмотреть профиль Найти все сообщения от Heny
 
Регистрация: 27.01.2016
Сообщений: 35

Спасибо всем большое, теперь попробую в этом разобраться
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
leaflet, canvg, html2canvas обрезка канваса в png Trippal Общие вопросы Javascript 0 16.02.2016 12:00
html2canvas и сторонние изображения Instincted jQuery 6 30.04.2014 06:26