自分で作ったり提供したりするものは、まず自分自身で使ってみろろということです。自分じゃ使わないものなら人はいくらでも無責任にも無思考にもなれる。そういう投げやりな「サービス」やら「プロダクツ」なんて、だれだってイヤだ。自分が作り手と同時に利用者の立場になれば、ちゃんと使えるレベルのものを提供しようとします。

2010年4月7日水曜日

GAE Imageサービス

Google App Engineのイメージサービスを試しました、面白い機能なので、皆さんに紹介しようと思います。

まず、イメージサンプルのURLを紹介します。
GAEイメージサービス
htmlファイル:
イメージ表示
イメージサイズ変更表示
イメージ上下反転
イメージ左右反転
90度反転
クリップ
FeelingLucky
イメージ合成1
イメージ合成2

ImageserviceServlet.java
package imageservice;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
import javax.servlet.http.*;
import com.google.appengine.api.images.Composite;
import com.google.appengine.api.images.Image;
import com.google.appengine.api.images.ImagesService;
import com.google.appengine.api.images.ImagesServiceFactory;
import com.google.appengine.api.images.Transform;
import com.google.appengine.repackaged.com.google.common.collect.Lists;

@SuppressWarnings("serial")
public class ImageserviceServlet extends HttpServlet
{
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException
{
File file = new File("ae_gwt_java.png");
if (file.exists())
{
resp.setContentType("image/png");
OutputStream out = resp.getOutputStream();
String cmd = req.getParameter("cmd");
FileInputStream fin = new FileInputStream(file);
ByteArrayOutputStream bout = new ByteArrayOutputStream();
int len = 0;
byte[] buf = new byte[1024];
while ((len = fin.read(buf)) != -1) {
bout.write(buf, 0, len);
}
byte[] imagedata = bout.toByteArray();
//----------------------------------//
// 各処理
//----------------------------------//
if (cmd.equals("1"))
{
out.write(imagedata);
out.flush();
}
else if (cmd.equals("2"))
{
ImagesService imagesService = ImagesServiceFactory.getImagesService();
Image image = ImagesServiceFactory.makeImage(imagedata);
/* ***** イメージデータ編集・表示 ***** */
Transform trans = ImagesServiceFactory.makeResize(300, 300);
/* ***** イメージデータ編集・表示 ***** */
Image newImage = imagesService.applyTransform(trans, image);
byte[] newImageData = newImage.getImageData();
out.write(newImageData);
out.flush();
}
else if (cmd.equals("3"))
{
ImagesService imagesService = ImagesServiceFactory.getImagesService();
Image image = ImagesServiceFactory.makeImage(imagedata);
/* ***** イメージデータ編集・表示 ***** */
Transform trans = ImagesServiceFactory.makeVerticalFlip();
/* ***** イメージデータ編集・表示 ***** */
Image newImage = imagesService.applyTransform(trans, image);
byte[] newImageData = newImage.getImageData();
out.write(newImageData);
out.flush();
}
else if (cmd.equals("4"))
{
ImagesService imagesService = ImagesServiceFactory.getImagesService();
Image image = ImagesServiceFactory.makeImage(imagedata);
/* ***** イメージデータ編集・表示 ***** */
Transform trans = ImagesServiceFactory.makeHorizontalFlip();
/* ***** イメージデータ編集・表示 ***** */
Image newImage = imagesService.applyTransform(trans, image);
byte[] newImageData = newImage.getImageData();
out.write(newImageData);
out.flush();
}
else if (cmd.equals("5"))
{
ImagesService imagesService = ImagesServiceFactory.getImagesService();
Image image = ImagesServiceFactory.makeImage(imagedata);
/* ***** イメージデータ編集・表示 ***** */
Transform trans = ImagesServiceFactory.makeRotate(90);
/* ***** イメージデータ編集・表示 ***** */
Image newImage = imagesService.applyTransform(trans, image);
byte[] newImageData = newImage.getImageData();
out.write(newImageData);
out.flush();
}
else if (cmd.equals("6"))
{
ImagesService imagesService = ImagesServiceFactory.getImagesService();
Image image = ImagesServiceFactory.makeImage(imagedata);
/* ***** イメージデータ編集・表示 ***** */
Transform trans = ImagesServiceFactory.makeCrop(.25, .15, .8, .5);
/* ***** イメージデータ編集・表示 ***** */
Image newImage = imagesService.applyTransform(trans, image);
byte[] newImageData = newImage.getImageData();
out.write(newImageData);
out.flush();
}
else if (cmd.equals("7"))
{
ImagesService imagesService = ImagesServiceFactory.getImagesService();
Image image = ImagesServiceFactory.makeImage(imagedata);
/* ***** イメージデータ編集・表示 ***** */
Transform trans = ImagesServiceFactory.makeImFeelingLucky();
/* ***** イメージデータ編集・表示 ***** */
Image newImage = imagesService.applyTransform(trans, image);
byte[] newImageData = newImage.getImageData();
out.write(newImageData);
out.flush();
}
else if (cmd.equals("8"))
{
Image image = ImagesServiceFactory.makeImage(imagedata);
Image image1 = ImagesServiceFactory.makeImage(imagedata);
Composite comp1 = ImagesServiceFactory.makeComposite(
image1, 0,0,0.3f, Composite.Anchor.TOP_LEFT
);
Image image2 = ImagesServiceFactory.makeImage(imagedata);
Composite comp2 = ImagesServiceFactory.makeComposite(
image2, 0,0,0.5f, Composite.Anchor.TOP_RIGHT
);
Image image3 = ImagesServiceFactory.makeImage(imagedata);
Composite comp3 = ImagesServiceFactory.makeComposite(
image3, 0,0,0.7f, Composite.Anchor.BOTTOM_CENTER
);

List compositeList = Lists.newArrayList();
compositeList.add(comp1);
compositeList.add(comp2);
compositeList.add(comp3);
image = ImagesServiceFactory.getImagesService().composite(
compositeList,
360, 360, 0xfffL
);
byte[] newImageData = image.getImageData();
out.write(newImageData);
out.flush();
}
else if (cmd.equals("9"))
{
ImagesService imagesService = ImagesServiceFactory.getImagesService();
Image image1 = ImagesServiceFactory.makeImage(imagedata);
Transform trans1 = ImagesServiceFactory.makeVerticalFlip();
image1 = imagesService.applyTransform(trans1, image1);
Composite comp1 = ImagesServiceFactory.makeComposite(
image1, 0,0,0.3f, Composite.Anchor.TOP_LEFT
);
Image image2 = ImagesServiceFactory.makeImage(imagedata);
Transform trans2 = ImagesServiceFactory.makeHorizontalFlip();
image2 = imagesService.applyTransform(trans2, image2);
Composite comp2 = ImagesServiceFactory.makeComposite(
image2, 0,0,0.5f, Composite.Anchor.TOP_RIGHT
);
Image image3 = ImagesServiceFactory.makeImage(imagedata);
Transform trans3 = ImagesServiceFactory.makeRotate(270);
image3 = imagesService.applyTransform(trans3, image3);
Composite comp3 = ImagesServiceFactory.makeComposite(
image3, 0,0,0.7f, Composite.Anchor.BOTTOM_CENTER
);

List compositeList = Lists.newArrayList();
compositeList.add(comp1);
compositeList.add(comp2);
compositeList.add(comp3);
Image image = ImagesServiceFactory.makeImage(imagedata);
image = ImagesServiceFactory.getImagesService().composite(
compositeList,
image.getWidth()*2,
image.getHeight()*2,
0xffffffL
);
byte[] newImageData = image.getImageData();
out.write(newImageData);
out.flush();
}
}
else
{
resp.setContentType("text/plain");
resp.getWriter().println("イメージファイルは存在しません。");
}

0 件のコメント:

コメントを投稿

ホームページ