8
votes

En Java, est-il possible de convertir une bufferimage à une URI de données IMG?

J'ai créé une image graphique avec le code d'exemple suivant. xxx pré>

à ce stade, j'ai bufferedimage que je veux convertir en Uri de données IMG. Est-ce possible? Par exemple .. P>

<IMG SRC="data:image/png;base64,[BufferedImage data here]"/>


0 commentaires

3 Réponses :


14
votes

Non testé, mais quelque chose comme ça devrait le faire: XXX

Il y a Lot de différentes implémentations de codec de base64 pour Java . J'ai eu de bons résultats avec MIGBASE64 .


5 commentaires

"OutputStream Out" devrait être "byearrayOutPutStream", d'autres que cela fonctionne parfaitement! Merci!


Je reçois une erreur dans Eclipse si je le fais, mais l'autre fonctionne pour moi. Merci encore.


La sortie n'a pas de méthode TobyTeArray ()


@Jiyeon Mes excuses, voir le commentaire de Michael.


Depuis Java8, vous pouvez effectuer ce qui suit pour coder dans base64: base64.gecoder (). Encode (ImageBytes)



2
votes

Vous pouvez utiliser cette solution qui n'utilise aucune bibliothèque externe. Court et propre! Il utilise une bibliothèque Java 6 ( Datatypeconverter code>). Travaillé pour moi!

ByteArrayOutputStream output = new ByteArrayOutputStream();
ImageIO.write(image, "png", output);
DatatypeConverter.printBase64Binary(output.toByteArray());


0 commentaires

0
votes

J'utilise webdiver, obtenez CAPTCHA, comme ceci ci-dessous:

// formatName -> png
// pathname -> C:/Users/n/Desktop/tmp/test.png
public static String getScreenshot(WebDriver driver, String formatName, String pathname) {
    try {
        WebElement element = driver.findElement(By.xpath("//*[@id=\"imageCodeDisplayId\"]"));
        File screenshot = element.getScreenshotAs(OutputType.FILE);
        // base64 data
        String base64Str = ImageUtil.getScreenshot(screenshot.toString()); 
        return base64Str;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

public static String getScreenshot(String imgFile) {
    InputStream in;
    byte[] data = null; 
    try {
        in = new FileInputStream(imgFile);
        data = new byte[in.available()];
        in.read(data);
        in.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    String base64Str = new String(Base64.getEncoder().encode(data));
    if (StringUtils.isAnyBlank(base64Str)) {
        return null;
    }
    if (!base64Str.startsWith("data:image/")) {
        base64Str = "data:image/jpeg;base64," + base64Str;
    }
    return base64Str;
}


0 commentaires