JAVA图片处理大全

1.多个图片叠加

public static void combineImage(List<String> urlList, int width,
            int height, String destPath, String imgFormat) throws IOException {
        BufferedImage combinedImage = new BufferedImage(width, height,
                BufferedImage.TYPE_INT_ARGB);
        Graphics g = combinedImage.getGraphics();
        for (String urlStr : urlList) {
            URL url = new URL(urlStr);
            URLConnection conn = url.openConnection();
            conn.setReadTimeout(10 * 1000);
            InputStream in = conn.getInputStream();
            BufferedImage image = ImageIO.read(in);
            g.drawImage(image, 0, 0, width, height, null);
        }
        ImageIO.write(combinedImage, imgFormat, new File(destPath));
}

2.根据指定字符串生成图片

//根据str,font的样式以及输出文件目录
public static void createImage(String str,Font font,File outFile) throws Exception{
  //获取font的样式应用在str上的整个矩形
  Rectangle2D r=font.getStringBounds(str, new FontRenderContext(AffineTransform.getScaleInstance(1, 1),false,false));
  int unitHeight=(int)Math.floor(r.getHeight());//获取单个字符的高度
  //获取整个str用了font样式的宽度这里用四舍五入后+1保证宽度绝对能容纳这个字符串作为图片的宽度
  int width=(int)Math.round(r.getWidth())+1;
  int height=unitHeight+3;//把单个字符的高度+3保证高度绝对能容纳字符串作为图片的高度
  //创建图片
  BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_BGR);
  Graphics g=image.getGraphics();
  g.setColor(Color.WHITE);
  g.fillRect(0, 0, width, height);//先用白色填充整张图片,也就是背景
  g.setColor(Color.black);//在换成黑色
  g.setFont(font);//设置画笔字体
  g.drawString(str, 0, font.getSize());//画出字符串
  g.dispose();
  ImageIO.write(image, "png", outFile);//输出png图片
}

3.多张小jpg图合成一张大JPG图,在这里对大图只作宽度限制,不做高度限制

/**
     * 将多个小图片合成一张大jpg图  (小的jpg图片按照行列顺序平铺)
     * @param smallJPG ArrayList 一组小的jpg图片
     * @param bigWidth int 大图宽度
     * @param smallWidth int  单个文字生成的小图的宽度和高度是一致的
     * @return 
     */
    private void createBigJPG(ArrayList smallJPG, int bigWidth,
                                int smallHeigh,Color bgColor ,String picName) {
        try {
            if (bigWidth < smallWidth) //如果大图片的高度比小图片的高度还小 直接返回
                return;
            int colCount = bigWidth / smallWidth; //每行放置的字数
            int leftMargin = (int) ((bigWidth - colCount * smallWidth) / 2f); //左边距
            int rowCount = smallJPG.size();  //小图行数 
            int setWidth = bigWidth; //每列中间不留空隙,只留左右边距
            int setHeight = smallWidth * rowCount ; 
            //按照大图片宽高绘制一个背景图片
            BufferedImage bufImage = new BufferedImage(setWidth, setHeight,
                    BufferedImage.TYPE_INT_RGB);
            Graphics2D g = bufImage.createGraphics();
            g.setColor(bgColor); //背景的颜色
            g.fillRect(0, 0, setWidth, setHeight);
            int y = 0; //纵坐标
            for (int i = 0; i < rowCount; i++) { //遍历每行
                ArrayList col = (ArrayList) (smallJPG.get(i));
                int x = leftMargin; //横坐标  可能会出现左边距
                for (int j = 0; j < col.size(); j++) {
                    String jpgname = (String) (col.get(j));
                    ImageIcon icon = new ImageIcon(jpgname);
                    Image img = icon.getImage();
                    int imgWidth = img.getHeight(null);
                    g.drawImage(img, x, y, null);
                    x += imgWidth;
                }
                y += (smallWidth);  
            }
            g.dispose();
            FileOutputStream out = new FileOutputStream(picName);  //指定输出文件
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);  //设置文件格式
            JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bufImage); //从图片缓冲中读取
            param.setQuality(50f, true);
            encoder.encode(bufImage, param); //存盘
            out.flush();
            out.close();
        } catch (Exception e) {
            System.out.println( "createBigJPG Failed!");
            e.printStackTrace();    
        }
    }

4.根据提供的文字生成jpg图片

/**
     * 根据提供的文字生成jpg图片
     * @param s String  文字
     * @param smallWidth int  每个字的宽度和高度是一样的
     * @param bgcolor Color  背景色
     * @param fontcolor Color  字色
     * @param fontPath String 字体文件
     * @param jpgname String jpg图片名
     * @return
     */
    private String createJpgByFont(String s, int smallWidth,Color bgcolor,Color fontcolor,String fontPath,String jpgname) {
        try {
            BufferedImage bimage = new BufferedImage(s.length()*smallWidth,
                                                         smallWidth,BufferedImage.TYPE_INT_RGB);
            Graphics2D g = bimage.createGraphics();
            g.setColor(bgcolor); //背景色
            g.fillRect(0, 0, smallWidth, smallWidth); //画一个矩形
            g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); //去除锯齿(当设置的字体过大的时候,会出现锯齿)
            g.setColor(fontcolor); //字的颜色
            File file = new File(fontPath);  //字体文件
            Font font = Font.createFont(Font.TRUETYPE_FONT, file); //根据字体文件所在位置,创建新的字体对象(此语句在jdk1.5下面才支持)  
            g.setFont(font.deriveFont((float) smallWidth));   //font.deriveFont(float f)复制当前 Font 对象并应用新设置字体的大小
            g.drawString(s,0, smallWidth); //在指定坐标除添加文字
            g.dispose();
            FileOutputStream out = new FileOutputStream(jpgname); //指定输出文件
            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
            JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bimage);
            param.setQuality(50f, true);
            encoder.encode(bimage, param); //存盘
            out.flush();
            out.close();
        } catch (Exception e) {
            System.out.println( "createJpgByFont Failed!");
            e.printStackTrace();
        }
    }

5.gif动画分解成多张jpg

/**  
    * 把gif图片按帧拆分成jpg图片           
    * @param gifName String 小gif图片(路径+名称)  
    * @param path String 生成小jpg图片的路径  
    * @return String[] 返回生成小jpg图片的名称  
    */  
   private synchronized String[] splitGif(String gifName,String path) {  
       try {  
           GifDecoder decoder = new GifDecoder();  
           decoder.read(gifName);  
           int n = decoder.getFrameCount(); //得到frame的个数  
           String[] subPic = new String[n];  
           String tag = this.getTag();  
           for (int i = 0; i < n; i++) {  
               BufferedImage frame = decoder.getFrame(i); //得到帧  
               //int delay = decoder.getDelay(i); //得到延迟时间  
               //生成小的JPG文件  
               subPic[i] = path + String.value(i)+ ".jpg";  
               FileOutputStream out = new FileOutputStream(subPic[i]);  
               ImageIO.write(frame, "jpeg", out);  
               JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);     
              encoder.encode(frame); //存盘   
              out.flush();   
              out.close();  
           }  
           return subPic;  
       } catch (Exception e) {  
           System.out.println( "splitGif Failed!");  
           e.printStackTrace();  
           return null;  
       }    }

6.多张jpg图合成gif动画

/**  
     * 把多张jpg图片合成一张  
     * @param pic String[] 多个jpg文件名 包含路径  
     * @param newPic String 生成的gif文件名 包含路径  
     */  
    private synchronized void jpgToGif(String pic[], String newPic) {  
        try {  
            AnimatedGifEncoder e = new AnimatedGifEncoder();                e.setRepeat(0);  
            e.start(newPic);  
            BufferedImage src[] = new BufferedImage[pic.length];  
            for (int i = 0; i < src.length; i++) {  
                e.setDelay(200); //设置播放的延迟时间  
                src[i] = ImageIO.read(new File(pic[i])); // 读入需要播放的jpg文件  
                e.addFrame(src[i]);  //添加到帧中  
            }  
            e.finish();  
        } catch (Exception e) {  
            System.out.println( "jpgToGif Failed:");  
            e.printStackTrace();  
        }  
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
基于Java Web技术的图片管理系统 的设计与实现 本科毕业设计 目 录 第1章 引言 6 1.1 课题研究目的及意义 6 1.2 课题研究的内容 7 2.1 用户功能需求 7 图片收藏数据库查询系统图片收藏数据库查询系统是方便用户对建筑图片的管理,主 要功能包括添加图片功能、删除图片功能、修改图片功能、查询图片功能。 7 2.2 性能需求 7 2.3 主要技术分析 8 3.1 系统功能分析 9 3.2 处理流程设计 10 3.2.1 系统操作流程 10 3.2.2 数据增加流程 12 3.2.3 数据修改流程 13 3.2.4 数据删除流程 13 3.3 系统用例图 14 3.4 数据库设计 15 3.4.1 Mysql介绍 15 3.4.2 数据库表结构 16 3.4.3 数据库连接技术 18 3.5 系统E-R图 24 第4章 详细设计 24 4.1 用户登录 24 4.2 图像类别管理 26 4.3 图像信息管理 28 4.4 图片信息查询 30 第5章 系统调试与测试 32 5.1 程序调试 32 5.2 程序的测试 32 5.2.1 测试的重要性及目的 32 5.2.2 测试的步骤 34 5.2.3 测试的主要内容 34 第6章 结论 36 6.1 系统评价 36 6.2 安全性问题 37 摘 要 近十几年来,网络取得了令人难以置信的发展速度。人们在世界各地都可以共享信息、 进行电子商务交易、利用网络在线办公、在线办理业务等,这些都不断促进了Web应用的 发展。动态网站更是以其强交互性、自动更新、形式多样的优越性迅速发展,Web2.0互 联网模式的发展已经成为互联网新的发展趋势。 本系统采用了B/S(Browser/Server)体系结构,JSP(Java Server Page)作为前台开发工具,MySQL作为后台数据库进行开发。系统分为管理员和用户两个 角色,其中管理员的主要功能是图片的增删改查,用户的主要功能有注册、登录、浏览 图片等。本系统是一个基于JavaWeb技术的图片管理系统的设计与实现,不同分类的图片 可以满足不同人群对不同风格类型图片的需求,是一个简单的JavaWeb应用,可以带给用 户一个简洁、方便的新体验。 关键词:Java Web技术、JSP、MySQL、图片管理系统 Abstract Over the past decade or so, the Internet has made incredible progress.People all over the world can share information, conduct e- commerce transactions, use the Internet to work online, do business online, and so on.All of this has contributed to the development of Web applications.Dynamic web sites are rapidly evolving with the advantages of strong interactivity, automatic updates, and forms.The development of the web 2.0 Internet model has become the new trend of the Internet. This system USES the B/S (Browser/Server) architecture, and the JSP (Java Server Page) as the foreground development tool, and MySQL as the backend database for development.System is divided into two characters, administrators and users with the administrator's main function is picture to add and delete, the main function of the user register, login, browse pictures, etc.This system is based on a JavaWeb technology system, the design and implementation of the images of different classification can meet the needs of different people
图片锐化是一种图像处理技术,可以加强图像的边缘和细节,使图像更加清晰和鲜明。在Java中实现图片锐化处理可以通过以下步骤: 1. 导入相关的Java图像处理库,例如Java Advanced Imaging(JAI)库或ImageIO库,以便操作和处理图像。 2. 读取待锐化的图片文件,可以使用ImageIO库中的ImageIO.read()方法来读取图片文件,将其转换为BufferedImage对象。 3. 创建一个新的BufferedImage对象,用于存储锐化后的图像。可以使用BufferedImage的构造函数来创建一个与原始图像相同大小的新图像。 4. 遍历原始图像的每个像素点,在像素点附近的邻域内计算像素的梯度值。可以使用一些差分算子(如Sobel算子或Laplacian算子)来计算像素的梯度值。 5. 根据计算得到的梯度值,调整像素的颜色值,使得边缘和细节更加突出。可以使用一些锐化算法(如Unsharp Masking算法或Laplacian Sharpening算法)来增强像素的对比度。 6. 将调整后的像素值写入新的BufferedImage对象中。 7. 将锐化后的图像保存到文件中,可以使用ImageIO库中的ImageIO.write()方法将BufferedImage对象保存为图片文件。 需要注意的是,图像锐化是一种复杂的图像处理技术,具体的算法和实现方式可能因应用场景和需求的不同而有所差异。上述步骤仅是一种常见的实现思路,具体的锐化算法和参数可以根据需求进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值