Facebookからプロフィール写真を取得し、必要に応じてサイズを変更し、トリミングして素敵な正方形の写真にする次のコードがあります。
url = new URL(profilePictureUrl);
InputStream stream = url.openStream();
// Create the file from the URL
File temp = File.createTempFile(Codec.UUID(), "temp");
OutputStream out = null;
try {
out = new FileOutputStream(temp);
} catch (FileNotFoundException e1) {
Logger.error("SF-ERROR : Error creating temp file", e1);
}
int read = 0;
byte[] bytes = new byte[1024];
while ((read = stream.read(bytes)) != -1) {
out.write(bytes, 0, read);
}
stream.close();
out.close();
String uuid = Codec.UUID();
File resizedFile = File.createTempFile("resized-" + uuid, ".image");
File croppedFile = File.createTempFile("cropped-" + uuid, ".image");
// Check that this is in fact, an image
if (temp != null && ImageIO.read(temp) != null) {
int height = ImageIO.read(temp).getHeight();
int width = ImageIO.read(temp).getWidth();
double newWidth = (height * 180) / (width);
boolean high = false;
boolean wide = false;
if (newWidth > 220) {
high = true;
}
if (newWidth < 140) {
wide = true;
}
if (height > width) {
// Resize the image to a width of 180 pixels.
Images.resize(temp, resizedFile, 180, -1);
} else {
// Resize the image to a height of 180 pixels.
Images.resize(temp, resizedFile, -1, 180);
}
// Crop the remaining width or height to 180 pixels. This way we get a nice square picture.
if (high) {
Images.crop(resizedFile, croppedFile, 0, 20, 180, 200);
} else if (wide) {
Images.crop(resizedFile, croppedFile, 20, 0, 200, 180);
} else {
Images.crop(resizedFile, croppedFile, 0, 0, 180, 180);
}
wide と high のブール値が存在するので、トリミングはほぼ真ん中で行われます..
これは機能しますが、非常に多くの時間がかかります。
これがより速くできるかどうか、または私が何か間違っているかどうかは誰でもわかりますか?