GWT:如何将ImageData转换为Base64

GWT:如何将ImageData转换为Base64,image,gwt,base64,bytearray,Image,Gwt,Base64,Bytearray,我想将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.g

我想将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这样的东西。 谢谢。

//image.setUrl(“数据:image/jpeg;base64,+str”);更改为下面的代码
//每个点都有红、绿、蓝
StringBuffer sb=新的StringBuffer();
对于(int y=1;y,如下所示:

Canvas canvas = Canvas.createIfSupported();
canvas.setCoordinateSpaceWidth(imageData.getWidth());
canvas.setCoordinateSpaceHeight(imageData.getHeight());
canvas.getContext2d().putImageData(imageData, 0, 0);

String base64Str = canvas.toDataUrl();

可能与否重复。我希望从ImageData接收字节64字符串,该字符串包含有关图像每个点(红色、绿色、蓝色…)的信息,或者将其转换为某个字符串,字节[](然后在服务器中转换为Blob).所以我想在GAE数据存储中以Blob或字符串的形式保存它。.toDataUrl以字符串的形式返回图像的Base64编码版本,这还不够吗?这是我自己制作的。它不是Base64,而是字符串。
Canvas canvas = Canvas.createIfSupported();
canvas.setCoordinateSpaceWidth(imageData.getWidth());
canvas.setCoordinateSpaceHeight(imageData.getHeight());
canvas.getContext2d().putImageData(imageData, 0, 0);

String base64Str = canvas.toDataUrl();