Отправка содержимого холста на сервер Java и сохранение его в виде изображения - PullRequest
8 голосов
/ 10 января 2012

Хорошо, в основном я разработал простую систему загрузки изображений. Пользователь выбирает локальное изображение (используя HTML5 File / FileReader API) и имеет возможность обрезать его перед подтверждением результата.

Окончательный результат просматривается на холсте, поэтому для отправки его на сервер я использую toDataURL. Бэкэнд-сервер - это сервер NodeJS, который затем должен выполнить вызов REST к серверу Java, который создаст файл изображения из данных и сохранит его на диск.

Результаты toDataURL имеют вид: data: image / png; base64, ENCODED DATA.

Что мне понадобится на сервере Java для преобразования строки в правильное двоичное представление?

Ответы [ 4 ]

6 голосов
/ 10 января 2012

Вам необходимо удалить часть data:image/png;base64, и декодирование base 64 остальные.

5 голосов
/ 22 июня 2012
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.File;
import javax.imageio.ImageIO;
import javax.xml.bind.DatatypeConverter;

public class test {
    public static void main (String[] args){
     try{
            // remove data:image/png;base64, and then take rest sting
            String img64 = "64 base image data here";
        byte[] decodedBytes = DatatypeConverter.parseBase64Binary(img64 );
        BufferedImage bfi = ImageIO.read(new ByteArrayInputStream(decodedBytes));    
        File outputfile = new File("saved.png");
        ImageIO.write(bfi , "png", outputfile);
        bfi.flush();
     }catch(Exception e)
         {  
          //Implement exception code    
     }

    }
}
1 голос
/ 09 февраля 2018

Вам нужно заменить пробел на +, если у вашего base64Image есть пробел, то вы должны удалить данные: image / png; base64, из начала base64Image. Если вы не замените символ пробела, вы не сможете получить правильное изображение. тогда вы можете использовать Base64 декодирование

yourBase64String = yourBase64String.replace ('', '+');

yourBase64String = yourBase64String.substring (22);

1 голос
/ 10 января 2012

После того как вы Base64-декодируете строку, вы получите двоичное изображение в виде файла PNG. См. этот вопрос SO для получения подробной информации о том, как декодировать строку base64 в байты.

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