Как отправить изображение из Java-апплета в JavaScript? - PullRequest
2 голосов
/ 26 августа 2010

У меня есть Java-апплет, который генерирует изображение. В конечном счете, я хотел бы вставить данные изображения в базу данных, поэтому я хочу временно сохранить данные изображения в поле формы на странице, содержащей апплет. Я надеюсь сделать это без сохранения файла образа на клиентском компьютере.

Это все из подписи. Вот некоторый код, который должен генерировать битовое изображение из векторных данных, хранящихся в объекте sigObj:

sigObj.setImagePenWidth(10);
sigObj.setImageXSize(1000);
sigObj.setImageYSize(350);
image = sigObj.sigImage();

Переменная image является объектом BufferedImage. Кроме того, здесь выводится предупреждение, если я просто отправляю переменную изображения обратно в мой JavaScript:

BufferedImage@fe748f: type = 5 
ColorModel: #
pixelBits = 24 
numComponents = 3 
color space = java.awt.color.ICC_ColorSpace@641e9a 
transparency = 1 
has alpha = false 
isAlphaPre = false 
ByteInterleavedRaster: width = 1000 height = 350 #
numDataElements 3 
dataOff[0] = 2

(добавлены разрывы строк для удобства чтения)

Можно ли отправить само изображение обратно? Какие-либо предложения?

Я не очень хорошо знаю Java, поэтому прошу прощения, если задаю тупой вопрос.

Спасибо.

Edit:

Согласно предложению BalusC, вот код, который я использовал для преобразования изображения в строку Base64 для всех, кому это может быть интересно: (img - это BufferedImage, dataImg - это строка)

import org.apache.commons.codec.binary.Base64;

...

try{        
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ImageIO.write(img, "BMP", baos);
    byte[] bytes = baos.toByteArray();
    dataImg = new Base64().encodeBase64String(bytes);
} catch(Exception e) {}

Для кодирования Base64 используется кодек Apache Commons . Может быть, это тривиально, но для меня это было новым.

1 Ответ

2 голосов
/ 26 августа 2010

У вас есть в основном 2 варианта:

  1. Кодируйте его с byte[] на String, используя Base64 , чтобы двоичные данные не искажались припередаваться как символьные данные.Затем позвольте JavaScript установить его в качестве скрытого входного значения какой-либо формы POST.На стороне сервера вам нужно декодировать Base64, чтобы вернуть исходный байтовый массив.

  2. Используйте Java для программного запуска HTTP-запроса POST внутри апплета.Java SE API предлагает java.net.URLConnection для этого ( небольшой учебник здесь ).Более удобным API является Httpclient .На стороне сервера вам просто нужно обрабатывать его как обычный параметр запроса POST.

Неясно, какой язык программирования на стороне сервера вы используете, поэтому я не могу дать более подробный ответ для этой стороны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...