Java上傳圖片后的縮放

gwxd 9年前發布 | 4K 次閱讀 Java

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.ConvolveOp;
import java.awt.image.Kernel;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;

import org.apache.commons.fileupload.FileItem; import org.apache.log4j.Logger;

import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class ImageUtil { /**

 * Logger for this class
 */
private static final Logger logger = Logger.getLogger(ImageUtil.class);

public void imageScale(String srcFilePath, String targetFilePath,
        int width, int height) {
    this.imageScale(new File(srcFilePath), new File(targetFilePath), width,
            height);
}

public void imageScale(File srcFile, File targetFile, int width, int height) {
    try {
        Image image = javax.imageio.ImageIO.read(srcFile);

        image = image.getScaledInstance(width, height,
                Image.SCALE_AREA_AVERAGING);
        // Make a BufferedImage from the Image.
        BufferedImage mBufferedImage = new BufferedImage(width, height,
                BufferedImage.TYPE_INT_RGB);
        Graphics2D g2 = mBufferedImage.createGraphics();            

        g2.drawImage(image, 0, 0, width, height, Color.white, null);
        g2.dispose();

        float[] kernelData2 = { -0.125f, -0.125f, -0.125f, -0.125f, 2,
                -0.125f, -0.125f, -0.125f, -0.125f };
        Kernel kernel = new Kernel(3, 3, kernelData2);
        ConvolveOp cOp = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null);
        mBufferedImage = cOp.filter(mBufferedImage, null);

        File targetDir = targetFile.getParentFile();
        if (!targetDir.exists())
            targetDir.mkdirs();

        FileOutputStream out = new FileOutputStream(targetFile);
        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
        encoder.encode(mBufferedImage);
        out.close();
    } catch (Exception e) {
        logger.error(
                "imageScale(String, String, int, int) - 圖片壓縮出錯 - srcFilePath="
                        + srcFile.getPath() + ", targeFilePath="
                        + targetFile.getPath() + ", width=" + width
                        + ", height=" + height, e);
    }
}

public void imageScale(FileItem fileItem, String targetFilePath, int width,
        int height) {
    try {
        InputStream input = fileItem.getInputStream();
        Image image = javax.imageio.ImageIO.read(input);

        image = image.getScaledInstance(width, height,
                Image.SCALE_AREA_AVERAGING);
        BufferedImage mBufferedImage = new BufferedImage(width, height,
                BufferedImage.TYPE_INT_RGB);
        Graphics2D g2 = mBufferedImage.createGraphics();

        g2.drawImage(image, 0, 0, width, height, Color.white, null);
        g2.dispose();

        float[] kernelData2 = { -0.125f, -0.125f, -0.125f, -0.125f, 2,
                -0.125f, -0.125f, -0.125f, -0.125f };
        Kernel kernel = new Kernel(3, 3, kernelData2);
        ConvolveOp cOp = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null);
        mBufferedImage = cOp.filter(mBufferedImage, null);

        File target = new File(targetFilePath);
        File targetDir = target.getParentFile();
        if (!targetDir.exists())
            targetDir.mkdirs();

        FileOutputStream out = new FileOutputStream(targetFilePath);
        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
        encoder.encode(mBufferedImage);
        out.close();
        input.close();
    } catch (Exception e) {
        logger.error(
                "imageScale(String, String, int, int) - 圖片壓縮出錯 - fileItem="
                        + fileItem.getName() + ", targetFilePath="
                        + targetFilePath + ", width=" + width + ", height="
                        + height, e);
    }
}

public static void main(String[] args) {
    ImageUtil iu=new ImageUtil();
    iu.imageScale("c:/uploadFiles/191540095661.jpg", "c:/uploadFiles/t.jpg", 270, 220);
}

}</pre>

 本文由用戶 gwxd 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!