やりたいこと:GAEでサムネイル用の画像を作りたかった
問題:GAEに用意されたAPI使ってサイズを縮小すると、荒くなってとても汚くなった
解決:クライアント側で処理してアップロード
■環境
GAE/J
slim3使用
■処理の流れ
1:GAEで普通にアップロード。blobstoreに元画像が保存される
2:クライアント側(Javascript)で元画像を読み込んで、リサイズ処理をしてサムネ画像を生成&アップロード
3:サムネ画像をblobstoreに保持
■詳細
2については、最初にこのページにたどり着いたが、アルゴリズムが悪いらしく、非常に処理に時間がかかって問題となった。
その後、優れたライブラリにたどり着いた。
これで、2の処理はうまくいった。
最後に、どうやってcanvasの画像をblobstoreに保存するのかという問題が残った。
まず、js側の処理は下のを参考。
app engine側は、こういう感じ。
FileService fileService = FileServiceFactory.getFileService();
AppEngineFile file = fileService.createNewBlobFile("image/jpeg");
boolean lock = true;
FileWriteChannel writeChannel = fileService.openWriteChannel(file, lock);
// This time we write to the channel using standard Java
writeChannel.write(ByteBuffer.wrap(Base64.decode(画像データの文字列)));
// Now finalize
writeChannel.closeFinally();
BlobKey key = fileService.getBlobKey(file);