打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
struts2中使用kindeditor上传图片(包括jmagic压缩图片) - 鬼屋里的...
struts2中使用kindeditor上传图片(包括jmagic压缩图片)
 
项目中采用的是kindeditor3.4
UploadContentImgAction
view plaincopy to clipboardprint?
@SuppressWarnings("serial")     
@ParentPackage("control-center")     
public class UploadContentImgAction extends BaseAction {     
    private File up;     
    private String upFileName;     
    private String upContentType;     
    private String fileDir = "uploads/articleContentImg";        
    private String imgTitle;     
    private String align;     
    private int imgWidth;     
    private int imgHeight;     
         
    /**   
     * kindeditor图片上传   
     * @return   
     * @throws Exception   
     */    
    @Action("kindeditorImgUpload")     
    public String kindeditorImgUpload() throws Exception {     
        //只能传图片      
        try {     
            if(!validatePostfix(upFileName)) {     
                return "error";     
            }     
            User user = (User)getSession().get("user");     
            String fileRealDir = getServletContext().getRealPath(fileDir);     
            File file = up;     
            String fileRealName = createfilename(user.getUserId());     
            String fileName = fileRealName + upFileName.substring(upFileName.lastIndexOf(".")).toLowerCase();     
            File newFile = new File(fileRealDir, fileName);     
            FileUtils.copyFile(file, newFile);     
            //压缩图片     
            ImageUtil.resize(newFile.getPath(), newFile.getPath(), 500);         
            String id = "contentId";     
            String url = "/" + fileDir + "/" + fileName;     
            String border = "0";     
                 
            String result = "<mce:script type='text/javascript'><!--  
parent.KE.plugin['image'].insert('" + id + "','" + url + "','" + imgTitle + "','" + imgHeight + "','" + imgHeight + "','" + border + "','" + align + "');  
// --></mce:script>";     
             
            getHttpServletResponse().getWriter().write(result);     
        } catch (RuntimeException e) {     
            // TODO Auto-generated catch block     
            e.printStackTrace();     
        }     
        return null;     
    }     
    /**   
     * 生成文件名 : 当前时间 + 随机数 + 用户id   
     */    
    private String createfilename(int userId) {     
        StringBuilder result = new StringBuilder();     
        // 得到 本地的 当前时间     
        String now = DateUtil.getLongStrFromDate(new Date());     
        // 在 1000W 内随机生成一个数字     
        int rand = new Random().nextInt(9999999);     
        // 去掉 - 去掉 : 去掉 空格 后,返回     
        result.append(now.replace("-", "").replace(":", "").replace(" ", "")).append("_").append(rand).append("_").append(userId);     
        return result.toString();     
    }     
    /**   
     * 验证后缀名     应该从配置文件中获取   
     */    
    public boolean validatePostfix(String filename) {     
        // 定义可上传文件的 类型     
        List<String> fileTypes = new ArrayList<String>();     
    
        // 图片     
        fileTypes.add("jpg");     
        fileTypes.add("jpeg");     
        fileTypes.add("bmp");     
        fileTypes.add("gif");     
        fileTypes.add("png");     
    
        // 得到文件尾数 并 进行小写转换     
        String postfix = filename.substring(filename.lastIndexOf(".") + 1).toLowerCase();     
        return fileTypes.contains(postfix) ? true : false;     
    }     
    public File getUp() {     
        return up;     
    }     
    
    public void setUp(File up) {     
        this.up = up;     
    }     
    
    public String getUpFileName() {     
        return upFileName;     
    }     
    
    public void setUpFileName(String upFileName) {     
        this.upFileName = upFileName;     
    }     
    
    public String getUpContentType() {     
        return upContentType;     
    }     
    
    public void setUpContentType(String upContentType) {     
        this.upContentType = upContentType;     
    }     
    
    public String getImgTitle() {     
        return imgTitle;     
    }     
    
    public void setImgTitle(String imgTitle) {     
        this.imgTitle = imgTitle;     
    }     
    
    public int getImgWidth() {     
        return imgWidth;     
    }     
    
    public void setImgWidth(int imgWidth) {     
        this.imgWidth = imgWidth;     
    }     
    
    public int getImgHeight() {     
        return imgHeight;     
    }     
    
    public void setImgHeight(int imgHeight) {     
        this.imgHeight = imgHeight;     
    }     
    
    public String getAlign() {     
        return align;     
    }     
    
    public void setAlign(String align) {     
        this.align = align;     
    }     
}   
@SuppressWarnings("serial")  
@ParentPackage("control-center")  
public class UploadContentImgAction extends BaseAction {  
    private File up;  
    private String upFileName;  
    private String upContentType;  
    private String fileDir = "uploads/articleContentImg";     
    private String imgTitle;  
    private String align;  
    private int imgWidth;  
    private int imgHeight;  
      
    /** 
     * kindeditor图片上传 
     * @return 
     * @throws Exception 
     */ 
    @Action("kindeditorImgUpload")  
    public String kindeditorImgUpload() throws Exception {  
        //只能传图片   
        try {  
            if(!validatePostfix(upFileName)) {  
                return "error";  
            }  
            User user = (User)getSession().get("user");  
            String fileRealDir = getServletContext().getRealPath(fileDir);  
            File file = up;  
            String fileRealName = createfilename(user.getUserId());  
            String fileName = fileRealName + upFileName.substring(upFileName.lastIndexOf(".")).toLowerCase();  
            File newFile = new File(fileRealDir, fileName);  
            FileUtils.copyFile(file, newFile);  
            //压缩图片  
            ImageUtil.resize(newFile.getPath(), newFile.getPath(), 500);      
            String id = "contentId";  
            String url = "/" + fileDir + "/" + fileName;  
            String border = "0";  
              
            String result = "<mce:script type='text/javascript'><!--
parent.KE.plugin['image'].insert('" + id + "','" + url + "','" + imgTitle + "','" + imgHeight + "','" + imgHeight + "','" + border + "','" + align + "');
// --></mce:script>";  
          
            getHttpServletResponse().getWriter().write(result);  
        } catch (RuntimeException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
        return null;  
    }  
    /** 
     * 生成文件名 : 当前时间 + 随机数 + 用户id 
     */ 
    private String createfilename(int userId) {  
        StringBuilder result = new StringBuilder();  
        // 得到 本地的 当前时间  
        String now = DateUtil.getLongStrFromDate(new Date());  
        // 在 1000W 内随机生成一个数字  
        int rand = new Random().nextInt(9999999);  
        // 去掉 - 去掉 : 去掉 空格 后,返回  
        result.append(now.replace("-", "").replace(":", "").replace(" ", "")).append("_").append(rand).append("_").append(userId);  
        return result.toString();  
    }  
    /** 
     * 验证后缀名     应该从配置文件中获取 
     */ 
    public boolean validatePostfix(String filename) {  
        // 定义可上传文件的 类型  
        List<String> fileTypes = new ArrayList<String>();  
 
        // 图片  
        fileTypes.add("jpg");  
        fileTypes.add("jpeg");  
        fileTypes.add("bmp");  
        fileTypes.add("gif");  
        fileTypes.add("png");  
 
        // 得到文件尾数 并 进行小写转换  
        String postfix = filename.substring(filename.lastIndexOf(".") + 1).toLowerCase();  
        return fileTypes.contains(postfix) ? true : false;  
    }  
    public File getUp() {  
        return up;  
    }  
 
    public void setUp(File up) {  
        this.up = up;  
    }  
 
    public String getUpFileName() {  
        return upFileName;  
    }  
 
    public void setUpFileName(String upFileName) {  
        this.upFileName = upFileName;  
    }  
 
    public String getUpContentType() {  
        return upContentType;  
    }  
 
    public void setUpContentType(String upContentType) {  
        this.upContentType = upContentType;  
    }  
 
    public String getImgTitle() {  
        return imgTitle;  
    }  
 
    public void setImgTitle(String imgTitle) {  
        this.imgTitle = imgTitle;  
    }  
 
    public int getImgWidth() {  
        return imgWidth;  
    }  
 
    public void setImgWidth(int imgWidth) {  
        this.imgWidth = imgWidth;  
    }  
 
    public int getImgHeight() {  
        return imgHeight;  
    }  
 
    public void setImgHeight(int imgHeight) {  
        this.imgHeight = imgHeight;  
    }  
 
    public String getAlign() {  
        return align;  
    }  
 
    public void setAlign(String align) {  
        this.align = align;  
    }  

 
 ImageUitl

view plaincopy to clipboardprint?
package com.yancheng.myframe.util;     
    
import java.awt.AlphaComposite;     
import java.awt.Color;     
import java.awt.Font;     
import java.awt.Graphics2D;     
import java.awt.Image;     
import java.awt.geom.AffineTransform;     
import java.awt.image.AffineTransformOp;     
import java.awt.image.BufferedImage;     
import java.io.File;     
import java.io.FileOutputStream;     
import java.io.IOException;     
import javax.imageio.ImageIO;     
import magick.ImageInfo;     
import magick.MagickImage;     
import com.sun.image.codec.jpeg.JPEGCodec;     
import com.sun.image.codec.jpeg.JPEGImageEncoder;     
    
/**   
 * @author   
 *    
 */    
public class ImageUtil {     
         
    public final static int PHOTO_RATIO = 800; //缩放图片系数     
    static{     
        System.setProperty("jmagick.systemclassloader", "no");     
    }     
    /**   
     * 图片水印   
     *    
     * @param pressImg 水印图片   
     * @param targetImg 目标图片   
     * @param x 修正值 默认在中间   
     * @param y 修正值 默认在中间   
     * @param alpha 透明度   
     */    
    public final static void pressImage(String pressImg, String targetImg,     
            int x, int y, float alpha) {     
        try {     
            File img = new File(targetImg);     
            Image src = ImageIO.read(img);     
            int wideth = src.getWidth(null);     
            int height = src.getHeight(null);     
            BufferedImage image = new BufferedImage(wideth, height,     
                    BufferedImage.TYPE_INT_RGB);     
            Graphics2D g = image.createGraphics();     
            g.drawImage(src, 0, 0, wideth, 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, (wideth - wideth_biao) / 2,     
                    (height - height_biao) / 2, wideth_biao, height_biao, null);     
            // 水印文件结束     
            g.dispose();     
            ImageIO.write((BufferedImage) image, "jpg", img);     
        } catch (Exception e) {     
            e.printStackTrace();     
        }     
    }     
    
    /**   
     * 文字水印   
     *    
     * @param pressText 水印文字   
     * @param targetImg 目标图片   
     * @param fontName 字体名称   
     * @param fontStyle 字体样式   
     * @param color 字体颜色   
     * @param fontSize 字体大小   
     * @param x 修正值   
     * @param y 修正值   
     * @param alpha 透明度   
     */    
    public static void pressText(String pressText, String targetImg, String fontName, int fontStyle, Color color, int fontSize, int x,     
            int y, float alpha) {     
        try {     
            File img = new File(targetImg);     
            Image src = ImageIO.read(img);     
            int width = src.getWidth(null);     
            int height = src.getHeight(null);     
            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((BufferedImage) image, "jpg", img);     
        } catch (Exception e) {     
            e.printStackTrace();     
        }     
    }     
    
    /**   
     * 缩放 效果太差 ps: Graphics下的 还有 AffineTransform下的   
     * 缩放都是针对"图形"而不是"图像"的,所以处理后图片很不清晰   
     * @param filePath 图片路径   
     * @param height 高度   
     * @param width 宽度   
     * @param bb 比例不对时是否需要补白   
     */    
    public static void resizeImgcale(String filePath, int height, int width, boolean bb) {     
        try {     
            double ratio = 0.0; // 缩放比例     
            File f = new File(filePath);     
            BufferedImage bi = ImageIO.read(f);     
            Image itemp = bi.getScaledInstance(width, height, bi.SCALE_SMOOTH);     
            // 计算比例     
            if ((bi.getHeight() > height) || (bi.getWidth() > width)) {     
                if (bi.getHeight() > bi.getWidth()) {     
                    ratio = (new Integer(height)).doubleValue() / bi.getHeight();     
                } else {     
                    ratio = (new Integer(width)).doubleValue() / bi.getWidth();     
                }     
                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, "jpg", f);     
        } catch (IOException e) {     
            e.printStackTrace();     
        }     
    }     
    
    /**   
     * 计算字的长度   
     *    
     * @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;     
    }     
    
    /**   
     * 压缩图片   
     *    
     * @param imgsrc 源文件   
     * @param imgdist 目标文件   
     * @param widthdist 宽   
     * @param heightdist 高   
     */    
    public static void resizeImg(String imgsrc, String imgdist, int widthdist, int heightdist) {     
        try {     
            File srcfile = new File(imgsrc);     
            if (!srcfile.exists()) {     
                return;     
            }     
            Image src = javax.imageio.ImageIO.read(srcfile);     
            BufferedImage tag = new BufferedImage(widthdist, heightdist, BufferedImage.TYPE_INT_RGB);     
            /*   
             * SCALE_SMOOTH:尺寸平滑 SCALE_AREA_AVERAGING:尺度区平均 SCALE_FAST:尺度快速   
             * SCALE_REPLICATE:尺度复制   
             */    
            tag.getGraphics().drawImage(src.getScaledInstance(widthdist, heightdist, Image.SCALE_SMOOTH), 0, 0, null);     
            FileOutputStream out = new FileOutputStream(imgdist);     
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);     
            encoder.encode(tag);     
            out.close();     
        } catch (IOException ex) {     
            ex.printStackTrace();     
        }     
    }     
    
    /**   
     * 图片压缩   
     * @param picFrom   
     * @param picTo   
     * @param widthdist   
     * @param heightdist   
     */    
    public static void resize(String picFrom, String picTo, int widthdist, int heightdist) {     
        try {     
            ImageInfo info = new ImageInfo(picFrom);     
            MagickImage image = new MagickImage(new ImageInfo(picFrom));     
            MagickImage scaled = image.scaleImage(widthdist, heightdist);// 小图片文件的大小.     
            scaled.setFileName(picTo);     
            scaled.writeImage(info);     
        } catch (Exception ex) {     
            ex.printStackTrace();     
        }     
    }     
         
    public static void resize(String picFrom, String picTo, int ratio) throws Exception {     
        BufferedImage bi = ImageIO.read(new File(picFrom));     
        //原始图片属性     
        int srcWidth = bi.getWidth();     
        int srcHeight = bi.getHeight();     
        //生成图片属性     
        int newWidth = srcWidth;     
        int newHeight = srcHeight;     
        //如果超出最大宽或高就压缩     
        if (srcWidth > ratio || newHeight > ratio) {     
            //生成图片width, height计算     
            if (srcWidth >= srcHeight) {     
                if (srcWidth < ratio) {     
                    return;     
                }     
                newWidth = ratio;     
                newHeight = (int)(ratio * srcHeight / srcWidth);     
            } else {     
                if (srcHeight < ratio) {     
                    return;     
                }     
                newHeight = ratio;     
                newWidth = (int)(ratio * srcWidth / srcHeight);     
            }     
        }     
        resize(picFrom, picTo, newWidth, newHeight);     
    }     
         
    public static void resize(String picFrom, String picTo) throws Exception {     
        resize(picFrom, picTo, PHOTO_RATIO);     
    }     
    
    public static void main(String[] args) throws Exception {     
    //  resizeImg("d:/411766.jpg", "d:/411766_1.jpg", 800, 600);     
    //  resize("d:/test_4.jpg", "d:/test_4_2.jpg", 800);     
        pressText("欢喜冤家", "d:/411766.jpg", "简体", Font.ITALIC, Color.black, 90, 40, 80, 0.5f);     
    }     
    
}   
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
利用Java给图片添加水印
struts2结合验证码问题
java给图片加水印,文字水印 - fanth - JavaEye技术网站
ssh2 最简 crud tutorial
二维码Java开发(笔记)
java实现二维码的生成和解析:QRCode、zxing 两种方式
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服