1

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 のブール値が存在するので、トリミングはほぼ真ん中で行われます..

これは機能しますが、非常に多くの時間がかかります。

これがより速くできるかどうか、または私が何か間違っているかどうかは誰でもわかりますか?

4

0 に答える 0