我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何使用Java实现图片切割功能

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何使用Java实现图片切割功能

这篇文章将为大家详细讲解有关如何使用Java实现图片切割功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

具体内容如下

工具类

package com.xudaolong.Utils;import javax.imageio.IIOImage;import javax.imageio.ImageIO;import javax.imageio.ImageReader;import javax.imageio.ImageWriter;import javax.imageio.stream.ImageInputStream;import javax.imageio.stream.ImageOutputStream;import java.awt.*;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.util.Arrays;import java.util.Iterator;public class ImageCutterUtil {    public enum IMAGE_FORMAT {        BMP("bmp"),        JPG("jpg"),        WBMP("wbmp"),        JPEG("jpeg"),        PNG("png"),        GIF("gif");        private String value;        IMAGE_FORMAT(String value) {            this.value = value;        }        public String getValue() {            return value;        }        public void setValue(String value) {            this.value = value;        }    }        public static String getImageFormatName(File file) throws IOException {        String formatName = null;        ImageInputStream iis = ImageIO.createImageInputStream(file);        Iterator<ImageReader> imageReader = ImageIO.getImageReaders(iis);        if (imageReader.hasNext()) {            ImageReader reader = imageReader.next();            formatName = reader.getFormatName();        }        return formatName;    }            public static BufferedImage[] readerImage(File file) throws IOException {        BufferedImage sourceImage = ImageIO.read(file);        BufferedImage[] images = null;        ImageInputStream iis = ImageIO.createImageInputStream(file);        Iterator<ImageReader> imageReaders = ImageIO.getImageReaders(iis);        if (imageReaders.hasNext()) {            ImageReader reader = imageReaders.next();            reader.setInput(iis);            int imageNumber = reader.getNumImages(true);            images = new BufferedImage[imageNumber];            for (int i = 0; i < imageNumber; i++) {                BufferedImage image = reader.read(i);                if (sourceImage.getWidth() > image.getWidth() || sourceImage.getHeight() > image.getHeight()) {                    image = zoom(image, sourceImage.getWidth(), sourceImage.getHeight());                }                images[i] = image;            }            reader.dispose();            iis.close();        }        return images;    }        public static BufferedImage[] processImage(BufferedImage[] images, int x, int y, int width, int height) throws Exception {        if (null == images) {            return images;        }        BufferedImage[] oldImages = images;        images = new BufferedImage[images.length];        for (int i = 0; i < oldImages.length; i++) {            BufferedImage image = oldImages[i];            images[i] = image.getSubimage(x, y, width, height);        }        return images;    }        public static void writerImage(BufferedImage[] images, String formatName, File file) throws Exception {        Iterator<ImageWriter> imageWriters = ImageIO.getImageWritersByFormatName(formatName);        if (imageWriters.hasNext()) {            ImageWriter writer = imageWriters.next();            String fileName = file.getName();            int index = fileName.lastIndexOf(".");            if (index > 0) {                fileName = fileName.substring(0, index + 1) + formatName;            }            String pathPrefix = getFilePrefixPath(file.getPath());            File outFile = new File(pathPrefix + fileName);            ImageOutputStream ios = ImageIO.createImageOutputStream(outFile);            writer.setOutput(ios);            if (writer.canWriteSequence()) {                writer.prepareWriteSequence(null);                for (int i = 0; i < images.length; i++) {                    BufferedImage childImage = images[i];                    IIOImage image = new IIOImage(childImage, null, null);                    writer.writeToSequence(image, null);                }                writer.endWriteSequence();            } else {                for (int i = 0; i < images.length; i++) {                    writer.write(images[i]);                }            }            writer.dispose();            ios.close();        }    }        public static void cutImage(File sourceFile, File destFile, int x, int y, int width, int height) throws Exception {        // 读取图片信息        BufferedImage[] images = readerImage(sourceFile);        // 处理图片        images = processImage(images, x, y, width, height);        // 获取文件后缀        String formatName = getImageFormatName(sourceFile);        destFile = new File(getPathWithoutSuffix(destFile.getPath()) + formatName);        // 写入处理后的图片到文件        writerImage(images, formatName, destFile);    }        public static void getOSSupportsStandardImageFormat() {        String[] readerFormatName = ImageIO.getReaderFormatNames();        String[] readerSuffixName = ImageIO.getReaderFileSuffixes();        String[] readerMIMEType = ImageIO.getReaderMIMETypes();        System.out.println("========================= OS supports reader ========================");        System.out.println("OS supports reader format name :  " + Arrays.asList(readerFormatName));        System.out.println("OS supports reader suffix name :  " + Arrays.asList(readerSuffixName));        System.out.println("OS supports reader MIME type :  " + Arrays.asList(readerMIMEType));        String[] writerFormatName = ImageIO.getWriterFormatNames();        String[] writerSuffixName = ImageIO.getWriterFileSuffixes();        String[] writerMIMEType = ImageIO.getWriterMIMETypes();        System.out.println("========================= OS supports writer ========================");        System.out.println("OS supports writer format name :  " + Arrays.asList(writerFormatName));        System.out.println("OS supports writer suffix name :  " + Arrays.asList(writerSuffixName));        System.out.println("OS supports writer MIME type :  " + Arrays.asList(writerMIMEType));    }        private static BufferedImage zoom(BufferedImage sourceImage, int width, int height) {        BufferedImage zoomImage = new BufferedImage(width, height, sourceImage.getType());        Image image = sourceImage.getScaledInstance(width, height, Image.SCALE_SMOOTH);        Graphics gc = zoomImage.getGraphics();        gc.setColor(Color.WHITE);        gc.drawImage(image, 0, 0, null);        return zoomImage;    }        public static String getFilePrefixPath(File file) throws IOException {        String path = null;        if (!file.exists()) {            throw new IOException("not found the file !");        }        String fileName = file.getName();        path = file.getPath().replace(fileName, "");        return path;    }        public static String getFilePrefixPath(String path) throws Exception {        if (null == path || path.isEmpty()) throw new Exception("文件路径为空!");        int index = path.lastIndexOf(File.separator);        if (index > 0) {            path = path.substring(0, index + 1);        }        return path;    }        public static String getPathWithoutSuffix(String class="lazy" data-src) {        String path = class="lazy" data-src;        int index = path.lastIndexOf(".");        if (index > 0) {            path = path.substring(0, index + 1);        }        return path;    }        public static String getFileName(String filePath) throws IOException {        File file = new File(filePath);        if (!file.exists()) {            throw new IOException("not found the file !");        }        return file.getName();    }        public static void main(String[] args) throws Exception {        // 获取系统支持的图片格式//        ImageCutterUtil.getOSSupportsStandardImageFormat();        try {            // 起始坐标,剪切大小            int x = 14;            int y = 24;            int width = 62;            int height = 62;            // 参考图像大小            int clientWidth = 88;            int clientHeight = 88;            File file = new File("/Users/mac/IdeaProjects/QRdemo/resources/class="lazy" data-src/com/xudaolong/QR/TestQR/QR.jpg");            BufferedImage image = ImageIO.read(file);            double destWidth = image.getWidth();            double destHeight = image.getHeight();            if (destWidth < width || destHeight < height)                throw new Exception("源图大小小于截取图片大小!");            double widthRatio = destWidth / clientWidth;            double heightRatio = destHeight / clientHeight;            x = Double.valueOf(x * widthRatio).intValue();            y = Double.valueOf(y * heightRatio).intValue();            width = Double.valueOf(width * widthRatio).intValue();            height = Double.valueOf(height * heightRatio).intValue();            System.out.println("裁剪大小  x:" + x + ",y:" + y + ",width:" + width + ",height:" + height);            String formatName = getImageFormatName(file);            String pathSuffix = "." + formatName;            String pathPrefix = getFilePrefixPath(file);            String targetPath = pathPrefix + System.currentTimeMillis() + pathSuffix;            File destFile = new File(targetPath);            ImageCutterUtil.cutImage(file, destFile, x, y, width, height);        } catch (IOException e) {            e.printStackTrace();        }    }}

单方面测试

public void cutQR(String sourcePath) {        try {            File file = new File(sourcePath);            BufferedImage image = ImageIO.read(file);            // 起始坐标,剪切大小            int x = 14;            int y = 25;            int width = 62;            int height = 62;            // 参考图像大小            int clientWidth = 88;            int clientHeight = 88;            double destWidth = image.getWidth();            double destHeight = image.getHeight();            if (destWidth < width || destHeight < height)                throw new Exception("源图大小小于截取图片大小!");            double widthRatio = destWidth / clientWidth;            double heightRatio = destHeight / clientHeight;            //修改一下单位            x = Double.valueOf(x * widthRatio).intValue();            y = Double.valueOf(y * heightRatio).intValue();            width = Double.valueOf(width * widthRatio).intValue();            height = Double.valueOf(height * heightRatio).intValue();            System.out.println("裁剪大小  x:" + x + ",y:" + y + ",width:" + width + ",height:" + height);            //获取指定的名字//            String formatName = getImageFormatName(file);//            String pathSuffix = "." + formatName;//            String pathPrefix = getFilePrefixPath(file);//            String targetPath = pathPrefix + System.currentTimeMillis() + pathSuffix;            //最后一步进行裁剪到指定的名字            File destFile = new File(sourcePath);            ImageCutterUtil.cutImage(file, destFile, x, y, width, height);        } catch (Exception e) {            e.printStackTrace();        }}

关于“如何使用Java实现图片切割功能”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何使用Java实现图片切割功能

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何使用Java实现图片切割功能

这篇文章将为大家详细讲解有关如何使用Java实现图片切割功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体内容如下工具类package com.xudaolong.Utils;import javax
2023-06-28

Android使用ViewFlipper实现图片切换功能

今天给大家简单的讲一下Android手势,目前市场上的App中手势的运用比较少。 Android提供了两种手势: ①.Android提供了手势检测,并为手势检测提供了相应的监听器 ②.Android允许开发者添加手势,并提供了相应的API识
2023-05-30

vue-cropper组件如何实现图片切割上传

小编给大家分享一下vue-cropper组件如何实现图片切割上传,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!vue-cropper在vue中的引入1、组件内引入
2023-06-15

java使用CKEditor实现图片上传功能

java如何使用CKEditor实现图片上传功能,具体内容如下1.根据实际需要下载指定的CKEditor2.删除文件ckeditor/plugins/image/dialogs/image.js预览框中文本内容,并修改hidden属性值为显
2023-05-31

Vue怎么实现裁切图片功能

今天小编给大家分享一下Vue怎么实现裁切图片功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。效果:1)、安装 vue-cr
2023-06-30

怎么使用JS实现简单的图片切换功能

这篇“怎么使用JS实现简单的图片切换功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用JS实现简单的图片切换功能”文
2023-07-02

使用C#中的PictureBox控件实现图片切换功能

C#如何使用PictureBox图片控件实现图片交换,需要具体代码示例在C#应用程序开发中,PictureBox是一个常用的图片控件,可以用于显示和处理图像。实现图片的交换功能,即在两个或多个PictureBox之间切换显示不同的图片,可
使用C#中的PictureBox控件实现图片切换功能
2024-02-26

Android基于ImageSwitcher实现图片切换功能

左右切换图片控件大家都用ViewPager, ViewFipper比较多吧,我之前也用ViewPager实现了,使用ViewPager实现左右循环滑动图片,有兴趣的可以去看下,今天介绍的是基于ImageSwitcher实现的左右切换图片,先
2022-06-06

vue如何使用element实现上传图片和修改图片功能

本篇内容主要讲解“vue如何使用element实现上传图片和修改图片功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue如何使用element实现上传图片和修改图片功能”吧!一、应用场景1.
2023-07-02

Java使用Ajax实现跨域上传图片功能

说明 :图片服务器是用Nginx搭建的,用的是PHP语言这个功能 需要 用到两个js文件:jquery.js和jQuery.form.js