Spring MVC 上传图片(文件接收方式)

第一部分:前端页面 uploadImg.html

需要注意form 表单格式 enctype=”multipart/form-data”
action 提交 action=”/dudu_cloud/api/uploadUserHeadImg”

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="../../js/common/sourceController.js" type="text/javascript"></script>
</head>
<body style="filter:alpha(Opacity=0);-moz-opacity:0.0;opacity: 0.0;">
<div id="appupload">
   <form action="/dudu_cloud/api/uploadUserHeadImg" method="post" enctype="multipart/form-data">
    <label>用户名:</label><input type="text" name="name"/><br/>  
    <label>密 码:</label><input type="password" name="password"/><br/>  
    <label>头 像1</label><input type="file" name="imageFile"/><br/>  
    <input type="submit" value="提  交"/>  
</form>
   </div>
</div>
<script>
window.onload = function(){
      var sc = new sourceController();
      sc.addScript("js/common/jquery.Jcrop.min.js"); // 额外添加的js文件,必须在加载资源之前加入
      sc.addScript("js/module/demo/upload.js"); // 额外添加的js文件,必须在加载资源之前加入
      sc.addCss("css/common/jquery.Jcrop.css");
      sc.setCallBack(function(){
          setTimeout(function(){
              document.body.style.opacity = "1.0";
              document.body.style.filter = "alpha(opacity=100%)";
          },500);
      });
      sc.addSource(); // 加载常用的js和css文件

}; 

</script>
</body>
</html>

第二部分:后台springMVC.xml

    <!-- 文件上传 -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding">
            <value>UTF-8</value>
        </property>
        <property name="maxUploadSize">
            <!-- 上传文件大小限制为31M,31*1024*1024 -->
            <value>32505856</value>
        </property>
        <property name="maxInMemorySize">
            <value>4096</value>
        </property>
    </bean>

第三部分:后台Controller

    /**
     * 上传用户头像
     *   eprId 企业Id
     *   userId 用户Id 
     */
    @ResponseBody
    @RequestMapping(value = "/uploadUserHeadImg", method = RequestMethod.POST)
    public ResponseData apiUploadUserHeadImg( MultipartFile imageFile,HttpServletRequest request, HttpServletResponse response) {
        try {
         //  HashMap<String, Object> map = this.checkUserHeadImgRequest(request);// 请求map
           if(imageFile == null){
               return new ResponseData(ResponseData.ERROR,"0801",Constants.getParaValue("0801"));
           }
           // 上传文件大小


         //第一步:获取服务器的实际路径  
           String realPath = request.getSession().getServletContext().getRealPath("/");  

           System.out.println(realPath);  
        //需要上传的路径,我的路径根据用户的和当前日期划分路径  
           String resourcePath="upload/image";  
           UserInfoForm userInfo =new UserInfoForm();
           String userId ="17001090129";
           resourcePath+="/"+userId;  
           try{  
           //文件名  
             String name= imageFile.getOriginalFilename();  
             //获取时间的路径  
            Calendar c = Calendar.getInstance();
            int year = c.get(Calendar.YEAR);
            int month = c.get(Calendar.MONTH) + 1;
            int day= c.get(Calendar.DAY_OF_MONTH);

             resourcePath+="/"+year+"/"+month+"/"+day+"/";  
             File dir=new File(realPath+resourcePath);  
             if(!dir.exists()){  
                 dir.mkdirs();  
             }  
             //先把用户上传到原图保存到服务器上       
             Date date=new Date();  
             File file=new File(dir,date.getTime()+".jpg");  
             imageFile.transferTo(file);  
             // 上传文件成功
             if(file.exists()){  
                 String src=realPath+resourcePath+date.getTime(); 
                 boolean[] flag=new boolean[6];  

              //   flag[0]=ImageUtil.cutAndRotateImage(src+".jpg", src+"_s.jpg", x, y, width, height, degree);  
                 //缩放图片,生成不同大小的图片,应用于不同的大小的头像显示  
//                 flag[1]= ImageUtil.scale2(src+"_s.jpg", src+"_s_120.jpg", 120, 120, true);  
//                 flag[2]= ImageUtil.scale2(src+"_s.jpg", src+"_s_90.jpg", 90, 90, true);  
//                 flag[3]= ImageUtil.scale2(src+"_s.jpg", src+"_s_60.jpg", 60, 60, true);  
//                 flag[4]= ImageUtil.scale2(src+"_s.jpg", src+"_s_30.jpg", 30, 30, true);  
                 flag[1]= ImageUtil.scale2(src+".jpg", src+"_120.jpg", 120, 120, true);  
                 flag[2]= ImageUtil.scale2(src+".jpg", src+"_90.jpg", 90, 90, true);  
                 flag[3]= ImageUtil.scale2(src+".jpg", src+"_60.jpg", 60, 60, true);  
                 flag[4]= ImageUtil.scale2(src+".jpg", src+"_30.jpg", 30, 30, true);  
                 flag[5]= ImageUtil.scale2(file.getPath(), src+"_120.jpg", 120, 120, true);  
                 if(flag[0]&&flag[1]&&flag[2]&&flag[3]&&flag[4]&&flag[5]){  

                     // 入库

                 }
             }

           }catch (Exception e) {  
               // TODO: handle exception  
               e.printStackTrace();  

          }  
           return new ResponseData(null, ResponseData.OK, "0778", Constants.getParaValue("0778"));
        }catch (InterfaceException e) {
            return new ResponseData(ResponseData.ERROR,e.getMessage(),Constants.getParaValue(e.getMessage()));
        }  catch (Exception e) {
            e.printStackTrace();
            return new ResponseData(ResponseData.ERROR,"0002",Constants.getParaValue("0002"));
        }

    }

第四部分 上传头像的工具类 ImageUtil.java

package yonyou.dudu.cloud.utils.img;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.color.ColorSpace;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.awt.image.ColorConvertOp;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.Iterator;

import javax.imageio.ImageIO;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import javax.imageio.stream.ImageOutputStream;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;


/**
 * @author xingzhc
 * @date   2017-12-05 
 */
public class ImageUtil {
    private static Log log = LogFactory.getLog(ImageUtil.class);


    /***
     * 获取图片的类型
     * @param o
     * @return
     * @date   2016-3-30下午4:59:36
     */
    private static String getFormatName(Object o) {
        try {
            ImageInputStream iis = ImageIO.createImageInputStream(o);
            Iterator<ImageReader> iter = ImageIO.getImageReaders(iis);
            if (!iter.hasNext()) {
                return null;
            }

            ImageReader reader = iter.next();
            iis.close();
            return reader.getFormatName();
        } catch (IOException e) {
        }
        return null;
    }

    /**
     * 使用ImageReader获取图片尺寸
     * 
     * @param src
     *            源图片路径
     */
    public void getImageSizeByImageReader(String src) {
        long beginTime = new Date().getTime();
        File file = new File(src);
        try {
            Iterator<ImageReader> readers = ImageIO.getImageReadersByFormatName("jpg");
            ImageReader reader = (ImageReader) readers.next();
            ImageInputStream iis = ImageIO.createImageInputStream(file);
            reader.setInput(iis, true);
            System.out.println("width:" + reader.getWidth(0));
            System.out.println("height:" + reader.getHeight(0));
        } catch (IOException e) {
            e.printStackTrace();
        }
        long endTime = new Date().getTime();
        System.out.println("使用[ImageReader]获取图片尺寸耗时:[" + (endTime - beginTime)+"]ms");
    }

    /**
     * 使用BufferedImage获取图片尺寸
     * 
     * @param src
     *            源图片路径
     */
    public void getImageSizeByBufferedImage(String src) {
        long beginTime = new Date().getTime();
        File file = new File(src);
        FileInputStream is = null;
        try {
            is = new FileInputStream(file);
        } catch (FileNotFoundException e2) {
            e2.printStackTrace();
        }
        BufferedImage sourceImg = null;
        try {
            sourceImg = javax.imageio.ImageIO.read(is);
            System.out.println("width:" + sourceImg.getWidth());
            System.out.println("height:" + sourceImg.getHeight());
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        long endTime = new Date().getTime();
        System.out.println("使用[BufferedImage]获取图片尺寸耗时:[" + (endTime - beginTime)+"]ms");
    }

    /***
     * 获取图片的宽
     * @param srcImageFile
     * @return
     * @date   2016-3-30下午9:01:08
     */
    public static int  getImageWidth(String srcImageFile){
         try {
             File file = new File(srcImageFile);
             Iterator<ImageReader> readers = ImageIO.getImageReadersByFormatName("jpg");
             ImageReader reader = (ImageReader) readers.next();
             ImageInputStream iis = ImageIO.createImageInputStream(file);
             reader.setInput(iis, true);

             return reader.getWidth(0);
         } catch (IOException e) {
             e.printStackTrace();
             return 0;
         }
    }
    /***
     * 获取文件的高
     * @param srcImageFile
     * @return
     * @date   2016-3-30下午9:02:19
     */
    public static int getImageHeight(String srcImageFile){
        File file = new File(srcImageFile);
        try {
            Iterator<ImageReader> readers = ImageIO.getImageReadersByFormatName("jpg");
            ImageReader reader = (ImageReader) readers.next();
            ImageInputStream iis = ImageIO.createImageInputStream(file);
            reader.setInput(iis, true);

            return reader.getHeight(0);
        } catch (IOException e) {
            e.printStackTrace();
            return 0;
        }
    }

    /***
     * 剪裁图片
     * @param src
     * @param dest
     * @param x  起点横坐标
     * @param y  纵坐标
     * @param w  长
     * @param h  高
     * @throws IOException
     * @date   2016-3-30下午12:19:10
     */
     public static boolean cutImage(String src,String dest,int x,int y,int w,int h) {   
         try{
         Iterator iterator = ImageIO.getImageReadersByFormatName("jpg");   
         ImageReader reader = (ImageReader)iterator.next();   
         InputStream in=new FileInputStream(src);  
         ImageInputStream iis = ImageIO.createImageInputStream(in);   
         reader.setInput(iis, true);   
         ImageReadParam param = reader.getDefaultReadParam(); 
         x=(x>0?x:0);
         y=(y>0?y:0);
         Rectangle rect = new Rectangle(x, y, w,h);    
         param.setSourceRegion(rect);   
         BufferedImage bi = reader.read(0,param);     
         ImageIO.write(bi, "jpg", new File(dest));    
         return true;
         }catch (Exception e) {
            // TODO: handle exception
             e.printStackTrace();
             return false;
        }

  } 
     /***
      * 图片旋转指定角度
      * @param bufferedimage 图像
      * @param degree      角度
      * @return
      * @date   2016-3-30下午3:10:27
      */
     public static BufferedImage rotateImage(final BufferedImage bufferedimage,
                final int degree) {
            int w = bufferedimage.getWidth();
            int h = bufferedimage.getHeight();
            int type = bufferedimage.getColorModel().getTransparency();
            BufferedImage img;
            Graphics2D graphics2d;
            (graphics2d = (img = new BufferedImage(w, h, type))
                    .createGraphics()).setRenderingHint(
                    RenderingHints.KEY_INTERPOLATION,
                    RenderingHints.VALUE_INTERPOLATION_BILINEAR);
       //     graphics2d.setBackground(Color.white);
            graphics2d.setPaint(Color.WHITE);
            graphics2d.fillRect(0, 0, w, h);
            graphics2d.rotate(Math.toRadians(degree), w / 2, h / 2);
            graphics2d.drawImage(bufferedimage, 0, 0,Color.WHITE, null);
            graphics2d.dispose();
            return img;
        }
     public static boolean rotateImage(String srcImageFile, String result,
             int degree){
         try{
             BufferedImage src = ImageIO.read(new File(srcImageFile)); // 读入文件
             BufferedImage tag= rotateImage(src, degree);

             ImageIO.write(tag, "JPEG", new File(result));

             return true;
         }catch (Exception e) {
             // TODO: handle exception
             return false;
         }
     }

     public static BufferedImage Rotate(Image src, int angel) {  
            int src_width = src.getWidth(null);  
            int src_height = src.getHeight(null); 
          //  angel=angel>0?angel:(360-angel);
            // calculate the new image size  
            Rectangle rect_des = CalcRotatedSize(new Rectangle(new Dimension(  
                    src_width, src_height)), angel);  

            BufferedImage res = null;  
            res = new BufferedImage(rect_des.width, rect_des.height,  
                    BufferedImage.TYPE_INT_RGB);  
            Graphics2D g2 = res.createGraphics();  
            g2.setPaint(Color.WHITE);
            g2.fillRect(0, 0, rect_des.width,  rect_des.height);
            // transform  
            g2.translate((rect_des.width - src_width) / 2,  
                    (rect_des.height - src_height) / 2);  
            g2.rotate(Math.toRadians(angel), src_width / 2, src_height / 2);  

            g2.drawImage(src, null, null);  
            return res;  
        }  

        public static Rectangle CalcRotatedSize(Rectangle src, int angel) {  
            // if angel is greater than 90 degree, we need to do some conversion  
            if (angel >= 90) {  
                if(angel / 90 % 2 == 1){  
                    int temp = src.height;  
                    src.height = src.width;  
                    src.width = temp;  
                }  
                angel = angel % 90;  
            }  

            double r = Math.sqrt(src.height * src.height + src.width * src.width) / 2;  
            double len = 2 * Math.sin(Math.toRadians(angel) / 2) * r;  
            double angel_alpha = (Math.PI - Math.toRadians(angel)) / 2;  
            double angel_dalta_width = Math.atan((double) src.height / src.width);  
            double angel_dalta_height = Math.atan((double) src.width / src.height);  

            int len_dalta_width = (int) (len * Math.cos(Math.PI - angel_alpha  
                    - angel_dalta_width));  
            int len_dalta_height = (int) (len * Math.cos(Math.PI - angel_alpha  
                    - angel_dalta_height));  
            int des_width = src.width + len_dalta_width * 2;  
            int des_height = src.height + len_dalta_height * 2;  
            return new java.awt.Rectangle(new Dimension(des_width, des_height));  
        }

        public static boolean Rotate(String srcImageFile, String result,
                int degree){
            try{
                degree=degree>0?degree:(360-degree);
                BufferedImage src = ImageIO.read(new File(srcImageFile));  
                BufferedImage tag = Rotate(src, degree);
                ImageIO.write(tag, "JPEG", new File(result));                
                 return true;
            }catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
                return false;
            }
        }


    public static boolean cutAndRotateImage(String srcImageFile,String dest,int x,int y,int w,int h,int degree){
        try{
            BufferedImage src = ImageIO.read(new File(srcImageFile)); // 读入文件
            BufferedImage tag= Rotate(src, degree);
             Iterator iterator = ImageIO.getImageReadersByFormatName("jpg");   
             ImageReader reader = (ImageReader)iterator.next();   
        //     InputStream in=new FileInputStream(tag); 
             ByteArrayOutputStream bs = new ByteArrayOutputStream();  
             ImageOutputStream ios = ImageIO.createImageOutputStream(bs);  
             ImageIO.write(tag, "jpg", ios);
             InputStream in=new  ByteArrayInputStream(bs.toByteArray());
             ImageInputStream iis=ImageIO.createImageInputStream(in);
             reader.setInput(iis, true);   
             ImageReadParam param = reader.getDefaultReadParam(); 
             x=(x>0?x:0);
             y=(y>0?y:0);
             Rectangle rect = new Rectangle(x, y, w,h);    
             param.setSourceRegion(rect);   
             BufferedImage bi = reader.read(0,param);     
             ImageIO.write(bi, "jpg", new File(dest));  
            return true;
        }catch (Exception e) {
            // TODO: handle exception
            return false;
        }
    }

     /***
      * 按照比例缩放
      * @param srcImageFile
      * @param result  
      * @param scale 缩放比例
      * @param flag 缩放选择:true 放大; false 缩小;
      * @return
      * @date   2016-3-30下午2:39:44
      */
     public  static boolean scale(String srcImageFile, String result,
                int scale, boolean flag) {
            try {
                File file = new File(srcImageFile);
                BufferedImage src = ImageIO.read(file); // 读入文件
                 Iterator<ImageReader> readers = ImageIO.getImageReadersByFormatName("jpg");
                 ImageReader reader = (ImageReader) readers.next();
                 ImageInputStream iis = ImageIO.createImageInputStream(file);
                 reader.setInput(iis, true);
                int width = reader.getWidth(0); // 得到源图宽
                int height = reader.getHeight(0); // 得到源图长
                if (flag) {// 放大
                    width = width * scale;
                    height = height * scale;
                } else {// 缩小
                    width = width / scale;
                    height = height / scale;
                }
                Image image = src.getScaledInstance(width, height,
                        Image.SCALE_DEFAULT);
                BufferedImage tag = new BufferedImage(width, height,
                        BufferedImage.TYPE_INT_RGB);
                Graphics g = tag.getGraphics();
                g.drawImage(image, 0, 0, null); // 绘制缩小后的图
                g.dispose();
                ImageIO.write(tag, "jpg", new File(result));// 输出到文件流
                return true;
            } catch (IOException e) {
                e.printStackTrace();
                return false;
            }
        }
     /***
      * 缩放图像,按照长宽缩放
      * @param srcImageFile
      * @param result
      * @param height  变换后的高度
      * @param width   变换后的长度
      * @param bb      比例不对称时,是否补白,true 补白;false 不补白
      * @return

      * @date   2016-3-30下午2:44:37
      */
     public  static boolean scale2(String srcImageFile, String result, int height, int width, boolean bb) {
            try {
                double ratio = 0.0; // 缩放比例
                File file = new File(srcImageFile);
                BufferedImage bi = ImageIO.read(file); // 读入文件
                 Iterator<ImageReader> readers = ImageIO.getImageReadersByFormatName("jpg");
                 ImageReader reader = (ImageReader) readers.next();
                 ImageInputStream iis = ImageIO.createImageInputStream(file);
                 reader.setInput(iis, true);
                int width1 = reader.getWidth(0); // 得到源图宽
                int height1 = reader.getHeight(0); // 得到源图长
                Image itemp = bi.getScaledInstance(width, height, bi.SCALE_SMOOTH);
                // 计算比例
                if ((height1 > height) || (width1 > width)) {
                    if (height1 > width1) {
                        ratio = (new Integer(height)).doubleValue()
                                / height1;
                    } else {
                        ratio = (new Integer(width)).doubleValue() / width1;
                    }
                    AffineTransformOp op = new AffineTransformOp(AffineTransform
                            .getScaleInstance(ratio, ratio), null);
                    itemp = op.filter(bi, null);
                }
                if (bb) {//补白
                    BufferedImage image = new BufferedImage(width, height,
                            BufferedImage.TYPE_INT_RGB);
                    Graphics2D g = image.createGraphics();
                    g.setColor(Color.white);
                    g.fillRect(0, 0, width, height);
                    if (width == itemp.getWidth(null))
                        g.drawImage(itemp, 0, (height - itemp.getHeight(null)) / 2,
                                itemp.getWidth(null), itemp.getHeight(null),
                                Color.white, null);
                    else
                        g.drawImage(itemp, (width - itemp.getWidth(null)) / 2, 0,
                                itemp.getWidth(null), itemp.getHeight(null),
                                Color.white, null);
                    g.dispose();
                    itemp = image;
                }
                ImageIO.write((BufferedImage) itemp, "JPEG", new File(result));
                return true;
            } catch (IOException e) {
                e.printStackTrace();
                return false;
            }
        }
     /***
      * 转换图像格式
      * @param srcImageFile 原图像地址
      * @param formatName   转换类型
      * @param destImageFile 转换后的地址
      * @return
      * @author roychenyi
      * @date   2016-3-30下午2:49:15
      */
        public  static boolean convert(String srcImageFile, String formatName, String destImageFile) {
            try {
                File f = new File(srcImageFile);
                f.canRead();
                f.canWrite();
                BufferedImage src = ImageIO.read(f);
                ImageIO.write(src, formatName, new File(destImageFile));
                return true;
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
        }

        /**
         * 彩色转为黑白 
         * @param srcImageFile 源图像地址
         * @param destImageFile 目标图像地址
         */
        public final static void gray(String srcImageFile, String destImageFile) {
            try {
                BufferedImage src = ImageIO.read(new File(srcImageFile));
                ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY);
                ColorConvertOp op = new ColorConvertOp(cs, null);
                src = op.filter(src, null);
                ImageIO.write(src, "jpg", new File(destImageFile));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        /**
         * 给图片添加图片水印
         * @param pressImg 水印图片
         * @param srcImageFile 源图像地址
         * @param destImageFile 目标图像地址
         * @param x 修正值。 默认在中间
         * @param y 修正值。 默认在中间
         * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字
         */
        public  static boolean pressImage(String pressImg, String srcImageFile,String destImageFile,
                int x, int y, float alpha) {
            try {
                File file = new File(srcImageFile);
                BufferedImage src = ImageIO.read(file); // 读入文件
                 Iterator<ImageReader> readers = ImageIO.getImageReadersByFormatName("jpg");
                 ImageReader reader = (ImageReader) readers.next();
                 ImageInputStream iis = ImageIO.createImageInputStream(file);
                 reader.setInput(iis, true);
                int width = reader.getWidth(0); // 得到源图宽
                int height = reader.getHeight(0); // 得到源图长
                BufferedImage image = new BufferedImage(width, height,
                        BufferedImage.TYPE_INT_RGB);
                Graphics2D g = image.createGraphics();
                g.drawImage(src, 0, 0, width, height, null);
                // 水印文件
                Image src_biao = ImageIO.read(new File(pressImg));
                int wideth_biao = src_biao.getWidth(null);
                int height_biao = src_biao.getHeight(null);
                g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
                        alpha));
                g.drawImage(src_biao, (width-wideth_biao-x) ,
                        (height-height_biao-y) , wideth_biao, height_biao, null);
                // 水印文件结束
                g.dispose();
                ImageIO.write((BufferedImage) image,  "jpg", new File(destImageFile));
                return true;
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
        }

        /**
         * 给图片添加文字水印
         * @param pressText 水印文字
         * @param srcImageFile 源图像地址
         * @param destImageFile 目标图像地址
         * @param fontName 水印的字体名称
         * @param fontStyle 水印的字体样式
         * @param color 水印的字体颜色
         * @param fontSize 水印的字体大小
         * @param x 修正值
         * @param y 修正值
         * @param alpha 透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字
         */
        public  static boolean pressText(String pressText,
                String srcImageFile, String destImageFile, String fontName,
                int fontStyle, Color color, int fontSize,int x,
                int y, float alpha) {
            try {
                File file = new File(srcImageFile);
                BufferedImage src = ImageIO.read(file); // 读入文件
                 Iterator<ImageReader> readers = ImageIO.getImageReadersByFormatName("jpg");
                 ImageReader reader = (ImageReader) readers.next();
                 ImageInputStream iis = ImageIO.createImageInputStream(file);
                 reader.setInput(iis, true);
                int width = reader.getWidth(0); // 得到源图宽
                int height = reader.getHeight(0); // 得到源图长
                BufferedImage image = new BufferedImage(width, height,
                        BufferedImage.TYPE_INT_RGB);
                Graphics2D g = image.createGraphics();
                g.drawImage(src, 0, 0, width, height, null);
                g.setColor(color);
                g.setFont(new Font(fontName, fontStyle, fontSize));
                g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
                        alpha));
                // 在指定坐标绘制水印文字
                g.drawString(pressText, (width - (getLength(pressText) * fontSize))
                        / 2 + x, (height - fontSize) / 2 + y);
                g.dispose();
                ImageIO.write(image, "jpg", new File(destImageFile));// 输出到文件流
                return true;
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
        }

        /**
         * 计算text的长度(一个中文算两个字符)
         * @param text
         * @return
         */
        public  static int getLength(String text) {
            int length = 0;
            for (int i = 0; i < text.length(); i++) {
                if (new String(text.charAt(i) + "").getBytes().length > 1) {
                    length += 2;
                } else {
                    length += 1;
                }
            }
            return length / 2;
        }



  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值