将字节数组显示为图像; base64 数据 URI 在 IE 中不能超过 32KB
Displaying byte array as image; base64 data URI doesn't work above 32KB in IE
我的 bean 中有一个图像 byte[]
。用户可以使用 <h:inputFile/>
上传图片。一旦用户点击上传,图像就应该显示在页面中(不应保存在 DB/Folder 中)。我尝试使用 Base64 转换,但在 IE 中它只显示 32KB 大小的图像。
下面是我的 xhtml 代码。
<h:form id="signatureform" enctype="multipart/form-data">
<h:inputFile id="inputFile" label="file1" value="#{bean.part}"/>
<h:commandButton id="upButton" type="submit"
action="#{bean.uploadSignature}"
value="Upload" styleClass="commandButton">
</h:commandButton>
</h:form>
<h:graphicImage url="data:image/jpg;base64,#{bean.encodedImage}"
width="275px" height="75px"></h:graphicImage>
我的Java代码是
private String encodedImage ;
private Part part;
//getters and setters
public String uploadSignature() throws IOException {
InputStream inputStream = null;
try {
inputStream = part.getInputStream();
encodedImage = new String(Base64.encode(IOUtils.toByteArray(inputStream)));
} catch (Exception e) {
} finally {
if (inputStream != null) {
inputStream.close();
}
}
return SUCCESS;
}
我试过 <a4j:mediaOutput/>
但没有帮助。请帮我解决一下。
我终于可以在 IE 中显示我的图像了。我的要求是显示 275px *75px 的图像。为此,我在 Java 中调整了图像大小并显示在网页中。当我调整图像大小并转换为 Base64 字符串时,它变得小于 32kb。我尝试使用 12MB 的图像,效果很好 :)。下面是我的代码。
BufferedImage imBuff = ImageIO.read(inputStream);
BufferedImage resizedImg = resize(imBuff, 275, 75);
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(resizedImg, "jpg", os);
encodedImage = new String(Base64.encode(os.toByteArray()));
private BufferedImage resize(BufferedImage image, int newWidth, int newHeight) {
int currentWidth = image.getWidth();
int currentHeight = image.getHeight();
BufferedImage newImage = new BufferedImage(newWidth, newHeight, image.getType());
Graphics2D graphics2d = newImage.createGraphics();
graphics2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2d.drawImage(image, 0, 0, newWidth, newHeight, 0, 0,
currentWidth, currentHeight, null);
graphics2d.dispose();
return newImage;
}
希望这对其他试图在网页中以小尺寸显示大图像的人有所帮助。
我的 bean 中有一个图像 byte[]
。用户可以使用 <h:inputFile/>
上传图片。一旦用户点击上传,图像就应该显示在页面中(不应保存在 DB/Folder 中)。我尝试使用 Base64 转换,但在 IE 中它只显示 32KB 大小的图像。
下面是我的 xhtml 代码。
<h:form id="signatureform" enctype="multipart/form-data">
<h:inputFile id="inputFile" label="file1" value="#{bean.part}"/>
<h:commandButton id="upButton" type="submit"
action="#{bean.uploadSignature}"
value="Upload" styleClass="commandButton">
</h:commandButton>
</h:form>
<h:graphicImage url="data:image/jpg;base64,#{bean.encodedImage}"
width="275px" height="75px"></h:graphicImage>
我的Java代码是
private String encodedImage ;
private Part part;
//getters and setters
public String uploadSignature() throws IOException {
InputStream inputStream = null;
try {
inputStream = part.getInputStream();
encodedImage = new String(Base64.encode(IOUtils.toByteArray(inputStream)));
} catch (Exception e) {
} finally {
if (inputStream != null) {
inputStream.close();
}
}
return SUCCESS;
}
我试过 <a4j:mediaOutput/>
但没有帮助。请帮我解决一下。
我终于可以在 IE 中显示我的图像了。我的要求是显示 275px *75px 的图像。为此,我在 Java 中调整了图像大小并显示在网页中。当我调整图像大小并转换为 Base64 字符串时,它变得小于 32kb。我尝试使用 12MB 的图像,效果很好 :)。下面是我的代码。
BufferedImage imBuff = ImageIO.read(inputStream);
BufferedImage resizedImg = resize(imBuff, 275, 75);
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(resizedImg, "jpg", os);
encodedImage = new String(Base64.encode(os.toByteArray()));
private BufferedImage resize(BufferedImage image, int newWidth, int newHeight) {
int currentWidth = image.getWidth();
int currentHeight = image.getHeight();
BufferedImage newImage = new BufferedImage(newWidth, newHeight, image.getType());
Graphics2D graphics2d = newImage.createGraphics();
graphics2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2d.drawImage(image, 0, 0, newWidth, newHeight, 0, 0,
currentWidth, currentHeight, null);
graphics2d.dispose();
return newImage;
}
希望这对其他试图在网页中以小尺寸显示大图像的人有所帮助。