【发布时间】:2015-03-16 04:33:47
【问题描述】:
我想将 ImageData 转换为 Base64 字符串以将其保存在服务器中。有可能吗?我的项目是:
import com.google.gwt.canvas.client.Canvas;
import com.google.gwt.canvas.dom.client.Context2d;
import com.google.gwt.canvas.dom.client.ImageData;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.dom.client.ImageElement;
import com.google.gwt.event.dom.client.LoadEvent;
import com.google.gwt.event.dom.client.LoadHandler;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
public class ImgManipulation implements EntryPoint {
public void onModuleLoad() {
// download any car.jpg to war/images
final Image img = new Image("images/car.jpg");
img.setVisible(true);
RootPanel.get().add(img);
img.addLoadHandler(new LoadHandler() {
public void onLoad(LoadEvent event) {
scale(img);
}
});
}
private void scale(Image image) {
double scaleToRatio = 0.1;
Canvas canvasTmp = Canvas.createIfSupported();
Context2d context = canvasTmp.getContext2d();
double ch = (image.getHeight() * scaleToRatio) + 100;
double cw = (image.getWidth() * scaleToRatio) + 100;
canvasTmp.setCoordinateSpaceHeight((int) ch);
canvasTmp.setCoordinateSpaceWidth((int) cw);
ImageElement imageElement = ImageElement.as(image.getElement());
// s = source d = destination
double sx = 0;
double sy = 0;
double sw = imageElement.getWidth();
double sh = imageElement.getHeight();
double dx = 0;
double dy = 0;
double dw = imageElement.getWidth();
double dh = imageElement.getHeight();
context.scale(scaleToRatio, scaleToRatio);
context.drawImage(imageElement, sx, sy, sw, sh, dx, dy, dw, dh);
double w = dw * scaleToRatio;
double h = dh * scaleToRatio;
ImageData imageData = context.getImageData(0, 0, w, h);
Canvas canvasTmp2 = Canvas.createIfSupported();
canvasTmp2.setCoordinateSpaceHeight((int) imageData.getHeight());
canvasTmp2.setCoordinateSpaceWidth((int) imageData.getWidth());
Context2d context2 = canvasTmp2.getContext2d();
context2.putImageData(imageData, 0, 0);
RootPanel.get().add(new Label(" Canvas -> "));
RootPanel.get().add(canvasTmp2);
Image canvasImage = new Image(canvasTmp2.toDataUrl());
RootPanel.get().add(new Label(" Image from canvas -> "));
RootPanel.get().add(canvasImage);
// image.setUrl("data:image/jpeg;base64,"+str);
}
}
我认为的其他方式是将图像发送到服务器。但是如何在没有形式的情况下做到这一点?我没有找到像 ImageItem 这样的东西。 谢谢。
【问题讨论】:
-
没有。我想从 ImageData 接收 Byte64 字符串,其中包含有关图像每个点(红色,绿色,蓝色......)的信息,或者将其转换为一些字符串,字节 [](然后是服务器中的 Blob)。所以我想将它作为 Blob 或字符串保存在 GAE Datastore 中。
-
.toDataUrl 将图像的 Base64 编码版本作为字符串返回,这还不够吗?
-
我自己做的。它不是 Base64 而是字符串。
标签: image gwt base64 bytearray