精华内容
下载资源
问答
  • 部署图详解

    2020-01-18 11:41:55
    部署图 一、部署图概要 ​ 部署图用于静态建模,是表示运行时过程节点结构、构件实例及其对象结构的图。...四、部署图例子 五、关于部署图与构件图 ​ ★部署图与构件图相同的构成元素: 构...

    部署图

    一、部署图概要

    ​ 部署图用于静态建模,是表示运行时过程节点结构、构件实例及其对象结构的图。如果含有依赖关系的构件实例放置在不同节点上,部署视图可以展示出执行过程中的瓶颈。部署图的两种表现形式:实例层部署图和描述层部署图(会在后面的实例中给出)。

    二、部署图中的事物及解释
    在这里插入图片描述
    三、部署图中的关系及解释
    在这里插入图片描述
    四、部署图例子
    在这里插入图片描述
    在这里插入图片描述

    五、关于部署图与构件图

    ​ ★部署图与构件图相同的构成元素:

    构件、接口、构件实例、构件向外提供服务、构件要求外部提供的服务。

    ​ ★部署图与构件图的关系: 部署图表现构件实例; 构件图表现构件类型的定义。

    ​ 部署图偏向于描述构件在节点中运行时的状态,描述了构件运行的环境;

    ​ 构件图偏向于描述构件之间相互依赖支持的基本关系。


    文章内容扩展学习链接

    UML概述

    用例图详解

    类图详解

    顺序图详解

    协作图详解

    状态图详解

    活动图详解

    构件图详解

    展开全文
  • 文章目录八、构件图8.1 构件图概要8.2 构件图中的事物及解释8.3 构件图中的关系及解释8.4 构件图的例子九、部署图9.1 部署图概要9.2 部署图中的事物及解释9.3 部署图中的关系及解释9.4 部署图例子9.5 关于部署图与...

    本文转载自:https://www.cnblogs.com/leafsunshin/p/11495300.html

    作者:许东明

    大纲


    UML教程1:模型图的构成和功能说明
    UML教程2:用例图
    UML教程3:类图
    UML教程4:顺序图
    UML教程5:协作图
    UML教程6:状态图
    UML教程7:活动图
    UML教程8:构件图 部署图 附录


    八、构件图

    8.1 构件图概要

    • 构件图用于静态建模,是表示构件类型的组织以及各种构件之间依赖关系的图。
    • 构件图通过对构件间依赖关系的描述来估计对系统构件的修改给系统可能带来的影响。

    8.2 构件图中的事物及解释

    在这里插入图片描述

    • 可替换的物理部分包括软件代码、脚本或命令行文件,也可以表示运行时的对象,文档,数据库等。
    • 节点(node)是运行时的物理对象,代表一个计算机资源。具体请参见教程“部署图(deployment diagram)”部分。

    8.3 构件图中的关系及解释

    在这里插入图片描述

    8.4 构件图的例子

    实例1

    • 图中的构件名称是Dictionary字典。
    • 该构件向外提供两个接口,即两个服务Spell-check拼写检查、Synonyms同义词。
      在这里插入图片描述
      实例2
    • 图中“Planner计划者”构件向外提供一个“update更新”接口服务。
    • 同时,该构件要求外部接口提供一个“Reservations预定”服务。
      在这里插入图片描述

    九、部署图

    9.1 部署图概要

    • 部署图用于静态建模,是表示运行时过程节点结构、构件实例及其对象结构的图。
    • 如果含有依赖关系的构件实例放置在不同节点上,部署视图可以展示出执行过程中的瓶颈。
    • 部署图的两种表现形式:实例层部署图和描述层部署图(会在后面的实例中给出)。

    9.2 部署图中的事物及解释

    在这里插入图片描述

    9.3 部署图中的关系及解释

    在这里插入图片描述

    9.4 部署图例子

    实例1

    • 实例层部署图描述各节点和它们之间的连接。
    • 本图中的信息与上张描述层部署图中的内容是相互对应的。
    • 图中的关系是各个节点之间存在的通信关系。
      在这里插入图片描述

    实例2

    • 描述层部署图表示了系统中的各节点和每个节点包含的构件。
    • 图中包括的各种关系如下:
      • 通信链关系(不带箭头的直线)
        • TicketServe票服务器与Kiosk信息厅之间存在一对多的通信关联;与SalesTerminal售票终端也存在一对多的通信关联;
      • 依赖关系(带箭头的虚线)
        • TicketSeller售票构件依赖CreditCardCharges信用卡付款构件和TicketDB票数据库构件提供的服务。
          在这里插入图片描述

    9.5 关于部署图与构件图

    部署图与构件图相同的构成元素:
        构件、接口、构件实例、构件向外提供服务、构件要求外部提供的服务。
    部署图与构件图的关系:
           部署图表现构件实例;
           构件图表现构件类型的定义。
       
           部署图偏向于描述构件在节点中运行时的状态,描述了构件运行的环境;
           构件图偏向于描述构件之间相互依赖支持的基本关系。  
    

    十、附录

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    1.《用例驱动UML对象建模应用——范例分析》Doug Rosenberg、Kendall Scott 著,人民邮电出版社,2005。
    2.《UML精粹——标准对象建模语言简明指南》(第3版)Martin Fowler 著,徐家福 译,清华大学出版社,2005。
    3.《UML对象、组件和框架——Catalysis方法》Desmond Francis D’Souza、Alan Cameron Wills 著,清华大学出版社,2004。
    4.《UML和模式应用》(第2版)Craig Larman 著,机械工业出版社,2004。
    5.《有效用例模式》Steve Adolph, Paul Bramble 著,车立红 译,清华大学出版社,2003。
    6.《用例建模》,Kurt Bittner 著,姜昊 译,清华大学出版社,2003
    7.《UML和统一过程实用面向对象的分析和设计》Jim Arlow,Ila Neustadt,机械工业出版社,2003。
    8.《UML风格》Scott W. Ambler 著,王少峰 译,清华大学出版社,2004。 
    9.《UML用户指南》Grady Booch,Ivar Jacobson著,邵维忠等译,机械工业出版社,2001年6月。
    10. 《UML参考手册》Ivar Jacobson,James Rumbaugh。姚淑兰,唐发根译。机械工业出版社,2001。
    
    展开全文
  • 部署图

    2019-09-29 10:53:40
    通用准则 在特定的项目图上注明软件组件 ...UML部署图经常被认为是一个网络图或技术架构图,图2是该风格的一个例子,它描述了一个简单组织的技术基础结构。 注意图2是一个非常简单的例子...

    通用准则

    在特定的项目图上注明软件组件 图1是一个大学管理系统的UML部署图描述. 该图描述了那些包含单一应用程序的主要软件组件是怎样配置到生产环境中的,这使得项目团队能够确定他们的部署策略。2.集中在企业级图上的结点和通信关联
    UML部署图经常被认为是一个网络图或技术架构图,图2是该风格的一个例子,它描述了一个简单组织的技术基础结构。 注意图2是一个非常简单的例子,像这样的图,许多组织将会有几十甚至几百个结点。
    虽然在图的有限范围内注明组件的部署情况是可以显示它的作用的,例如图1,但图很快地就变得笨重起来。 图2则关注于企业的那些高阶部署,因此配置在硬件结点之上的软件组件的精细的、细节的东西就不需要显示出来,你可以在你的CASE工具中处理这些信息,但这并不意味着你需要在图上显示它们。

    转载于:https://www.cnblogs.com/byfei/archive/2013/03/27/2984719.html

    展开全文
  • 一个简单的KinEditor例子,扩展了将图片上传到服务器非部署目录后显示回JSP页面
  • 使用的是这个例子 https://kubesphere.io/docs/v2.1/zh-CN/quick-start/jenkinsfile-out-of-scm/ 运行流水线时 <code>Unit Test</code> 步骤报错,错误信息为 <pre><code> container [maven] does not exist ...
  • 图片在线转图例子

    2019-12-11 10:40:11
    先看效果: 使用主要技术一览: 1.imageRagick 2.im4java 3.spring-boot 4.hutool 部署组件: 1.nginx 2.centos7 操作步骤: 一、centos7虚拟机安装imageRagick 1.确保系统已经安装以下包: yum ...

    先看效果图:

    使用主要技术一览:

    1.imageRagick

    2.im4java

    3.spring-boot

    4.hutool

    部署组件:

    1.nginx

    2.centos7


    操作步骤:

    一、centos7虚拟机安装imageRagick

    1.确保系统已经安装以下包:

    yum install libjpeg
    yum install libjpeg-devel
    yum install libpng
    yum install libpng-devel
    yum install libtiff
    yum install libtiff-devel
    yum install libungif
    yum install libungif-devel
    yum install freetype
    yum install zlib

    2.通过下面的命令进行查看

    rpm -qa |grep libjpeg

    3.如果以前安装过,卸载掉ImageMagick

    yum remove ImageMagick
    yum install ImageMagick 

    4.编译的方式进行安装

    解压xz文件成tar文件
    xz -d ImageMagick-6.9.2-10.tar.xz
    解压tar文件
    tar xvf ImageMagick-6.9.2-10.tar
    cd ImageMagick-6.9.2-10
    ./configure --enable-shared --without-perl(如果不行就用./configure)
    make
    make install
    make check 

    5.确认是否成功

    convert -geometry 100x200 源文件.jpg 处理后文件.gif (格式转换)

    6.命令请自行百度学习

    二、安装nginx

    1.添加源

    rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

    2. 安装

    sudo yum install -y nginx
    

    3.启动Nginx并设置开机自动运行

    systemctl start nginx.service
    systemctl enable nginx.service

    4.熟悉一下所有nginx的命令
    cd /usr/local/nginx/sbin/
    ./nginx
    ./nginx -s stop
    ./nginx -s quit
    ./nginx -s reload
    ./nginx -s quit:此方式停止步骤是待nginx进程处理任务完毕进行停止。
    ./nginx -s stop:此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程。

    systemctl start nginx.service
    systemctl stop nginx.service
    systemctl reload nginx.service
    systemctl status nginx.service

    5.修改配置

    /etc/nginx/nginx.conf

    /etc/nginx/conf.d/default.conf

    /user/share/nginx/html

    6.正式使用会是nas地址(虚拟机没有nas,只好使用/home/img模拟),如果我们想让nas地址下的image使用nginx访问:

    1>.建立软连接

    cd /user/share/nginx/html

    ln -s /home/img .

    2>.添加路径过滤

    vi /etc/nginx/conf.d/default.conf

    server下添加:

    location ^~ /img/ {

        root /user/share/nginx/html

    }

    7.权限问题 403错误

    请参考 https://mp.csdn.net/postedit/103475983

    三、创建java项目image-utils


    1.使用 start.spring.io 生成项目
    2.引入eclipse
    3.核心类 ImageUtil 网上搜索的,贴出来大家可以一起抄

    package com.wd.image.utils;
    
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import javax.imageio.ImageIO;
    
    import org.im4java.core.CompositeCmd;
    import org.im4java.core.ConvertCmd;
    import org.im4java.core.IMOperation;
    import org.im4java.core.IdentifyCmd;
    import org.im4java.core.ImageCommand;
    import org.im4java.process.ArrayListOutputConsumer;
    
    import com.sun.image.codec.jpeg.JPEGCodec;
    import com.sun.image.codec.jpeg.JPEGEncodeParam;
    import com.sun.image.codec.jpeg.JPEGImageEncoder;
    
    import cn.hutool.core.io.FileUtil;
    
    /**
     * 图片处理工具类,经过测试ImageMagick7.x版本不支持,命令貌似换了,安装之后文件都不一样了
     * 
     * @author douzi
     * @createDate 2019年12月10日
     *
     */
    public class ImageUtil {
    
        /**
         * 是否使用 GraphicsMagick
         */
        private static final boolean USE_GRAPHICS_MAGICK_PATH = false;
        
        private static final boolean IS_COVER = true;
    
        /**
         * ImageMagick安装路径
         */
        private static final String IMAGE_MAGICK_PATH = "";//"D:\\software\\ImageMagick-6.2.7-Q8";
    
        /**
         * GraphicsMagick 安装目录
         */
        private static final String GRAPHICS_MAGICK_PATH = "D:\\software\\GraphicsMagick-1.3.23-Q8";
    
        /**
         * 水印图片路径
         */
        private static String watermarkImagePath = "/home/img/sy.jpg";
    
        /**
         * 水印图片
         */
        private static Image watermarkImage = null;
    
        static {
            try {
                //watermarkImage = ImageIO.read(new URL(watermarkImagePath));
                watermarkImage = ImageIO.read(new File(watermarkImagePath));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 命令类型
         * 
         * @author hailin0@yeah.net
         * @createDate 2016年6月5日
         *
         */
        private enum CommandType {
            convert("转换处理"), identify("图片信息"), compositecmd("图片合成");
            private String name;
    
            CommandType(String name) {
                this.name = name;
            }
        }
    
        /**
         * 获取 ImageCommand
         * 
         * @param command 命令类型
         * @return
         */
        private static ImageCommand getImageCommand(CommandType command) {
            ImageCommand cmd = null;
            switch (command) {
            case convert:
                cmd = new ConvertCmd(USE_GRAPHICS_MAGICK_PATH);
                break;
            case identify:
                cmd = new IdentifyCmd(USE_GRAPHICS_MAGICK_PATH);
                break;
            case compositecmd:
                cmd = new CompositeCmd(USE_GRAPHICS_MAGICK_PATH);
                break;
            }
            if (cmd != null && System.getProperty("os.name").toLowerCase().indexOf("windows") != -1) {
                cmd.setSearchPath(USE_GRAPHICS_MAGICK_PATH ? GRAPHICS_MAGICK_PATH : IMAGE_MAGICK_PATH);
            }
            return cmd;
        }
    
        /**
         * 获取图片信息
         * 
         * @param srcImagePath 图片路径
         * @return Map {height=, filelength=, directory=, width=, filename=}
         */
        public static Map<String, Object> getImageInfo(String srcImagePath) {
            IMOperation op = new IMOperation();
            op.format("%w,%h,%d,%f,%b");
            op.addImage(srcImagePath);
            IdentifyCmd identifyCmd = (IdentifyCmd) getImageCommand(CommandType.identify);
            ArrayListOutputConsumer output = new ArrayListOutputConsumer();
            identifyCmd.setOutputConsumer(output);
            try {
                identifyCmd.run(op);
            } catch (Exception e) {
                e.printStackTrace();
            }
            ArrayList<String> cmdOutput = output.getOutput();
            if (cmdOutput.size() != 1)
                return null;
            String line = cmdOutput.get(0);
            String[] arr = line.split(",");
            Map<String, Object> info = new HashMap<String, Object>();
            info.put("width", Integer.parseInt(arr[0]));
            info.put("height", Integer.parseInt(arr[1]));
            info.put("directory", arr[2]);
            info.put("filename", arr[3]);
            // info.put("filelength", Integer.parseInt(arr[4]));
            info.put("filelength", arr[4]);
            return info;
        }
    
        /**
         * 文字水印
         * 
         * @param srcImagePath 源图片路径
         * @param destImagePath 目标图片路径
         * @param content 文字内容(不支持汉字)
         * @throws Exception
         */
        public static void addTextWatermark(String srcImagePath, String destImagePath, String content)
                throws Exception {
            IMOperation op = new IMOperation();
            op.font("微软雅黑");
            // 文字方位-东南
            op.gravity("southeast");
            // 文字信息
            op.pointsize(38).fill("#BCBFC8").draw("text 10,10 " + content);
            // 原图
            op.addImage(srcImagePath);
            // 目标
            op.addImage(createDirectory(destImagePath));
            ImageCommand cmd = getImageCommand(CommandType.convert);
            cmd.run(op);
        }
    
        /**
         * 图片水印
         * 
         * @param srcImagePath 源图片路径
         * @param destImagePath 目标图片路径
         * @param dissolve 透明度(0-100)
         * @throws Exception
         */
        public static void addImgWatermark(String srcImagePath, String destImagePath, Integer dissolve)
                throws Exception {
        	addImgWatermark(srcImagePath, destImagePath, null, dissolve);
        }
        
        public static void addImgWatermark(String srcImagePath, String destImagePath, String watermarkImgPath, Integer dissolve)
                throws Exception {
            // 原始图片信息
            BufferedImage buffimg = ImageIO.read(new File(srcImagePath));
            int w = buffimg.getWidth();
            int h = buffimg.getHeight();
    
            IMOperation op = new IMOperation();
            // 水印透明度
            op.dissolve(dissolve);
            if (watermarkImgPath == null || "".equals(watermarkImgPath)) {
            	// 水印图片位置
            	op.geometry(watermarkImage.getWidth(null), watermarkImage.getHeight(null), w
            			- watermarkImage.getWidth(null) - 10, h - watermarkImage.getHeight(null) - 10);
            	// 水印
            	op.addImage(watermarkImagePath);
            } else {
            	Image watermarkImg = ImageIO.read(new File(watermarkImgPath));
            	// 水印图片位置
            	op.geometry(watermarkImg.getWidth(null), watermarkImg.getHeight(null), w
            			- watermarkImg.getWidth(null) - 10, h - watermarkImg.getHeight(null) - 10);
    
            	op.addImage(watermarkImgPath);
            }
            // 原图
            op.addImage(srcImagePath);
            // 目标
            op.addImage(createDirectory(destImagePath));
            ImageCommand cmd = getImageCommand(CommandType.compositecmd);
            cmd.run(op);
        }
    
        /**
         * jdk压缩图片-质量压缩
         * 
         * @param destImagePath 被压缩文件路径
         * @param quality 压缩质量比例
         * @return
         * @throws Exception
         */
        public static void jdkResize(String destImagePath, float quality) throws Exception {
            // 目标文件
            File resizedFile = new File(destImagePath);
            // 压缩
            Image targetImage = ImageIO.read(resizedFile);
            int width = targetImage.getWidth(null);
            int height = targetImage.getHeight(null);
            BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            Graphics g = image.createGraphics();
            g.drawImage(targetImage, 0, 0, width, height, null);
            g.dispose();
    
            String ext = getFileType(resizedFile.getName());
            if (ext.equals("jpg") || ext.equals("jpeg")) { // 如果是jpg
                                                           // jpeg格式的对输出质量进行设置
                FileOutputStream out = new FileOutputStream(resizedFile);
                JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
                JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(image);
                jep.setQuality(quality, false);
                encoder.setJPEGEncodeParam(jep);
                encoder.encode(image);
                out.close();
            } else {
                ImageIO.write(image, ext, resizedFile);
            }
    
        }
    
        /**
         * 压缩图片
         * 
         * @param srcImagePath 源图片路径
         * @param destImagePath 目标图片路径
         * @param width 压缩后的宽
         * @param height 压缩后的高
         * @param quality 压缩质量(0-100)
         * @param needWatermark 是否加水印
         * @return
         * @throws Exception
         */
        public static void resize(String srcImagePath, String destImagePath, int width, int height,
                Double quality, boolean needWatermark) throws Exception {
            // 按照原有形状压缩(横图、竖图)
            BufferedImage buffimg = ImageIO.read(new File(srcImagePath));
            int w = buffimg.getWidth();
            int h = buffimg.getHeight();
            if ((w > h && width < height) || (w < h && width > height)) {
                int temp = width;
                width = height;
                height = temp;
            }
            // 是否压缩
            if (w < width || h < height) {
                // 不压缩-是否加水印
                if (needWatermark) {
                    // 不压缩,加水印
                    addImgWatermark(srcImagePath, destImagePath, 100);
                }
                return;
            }
            // 压缩-是否加水印
            if (needWatermark) {
                // 压缩-加水印比例
                double cropRatio = 0f;
                if ((width + 0.0) / (w + 0.0) > (height + 0.0) / (h + 0.0)) {
                    cropRatio = (height + 0.0) / (h + 0.0);
                } else {
                    cropRatio = (width + 0.0) / (w + 0.0);
                }
                IMOperation op = new IMOperation();
                ImageCommand cmd = getImageCommand(CommandType.compositecmd);
                op.geometry(watermarkImage.getWidth(null), watermarkImage.getHeight(null),
                        (int) (w * cropRatio) - watermarkImage.getWidth(null) - 10,
                        (int) (h * cropRatio) - watermarkImage.getHeight(null) - 10);
                op.addImage(watermarkImagePath);
                op.addImage(srcImagePath);
                op.quality(quality);
                op.resize(width, height);
                op.addImage(createDirectory(destImagePath));
                cmd.run(op);
                return;
            }
    
            // 压缩-不加水印
            ImageCommand cmd = getImageCommand(CommandType.convert);
            IMOperation op = new IMOperation();
            op.addImage(srcImagePath);
            op.quality(quality);
            op.resize(width, height);
            op.addImage(createDirectory(destImagePath));
            cmd.run(op);
        }
    
        /**
         * 去除Exif信息,可减小文件大小
         * 
         * @param srcImagePath 源图片路径
         * @param destImagePath 目标图片路径
         * @throws Exception
         */
        public static void removeProfile(String srcImagePath, String destImagePath) throws Exception {
            IMOperation op = new IMOperation();
            op.addImage(srcImagePath);
            op.profile("*");
            op.addImage(createDirectory(destImagePath));
            ImageCommand cmd = getImageCommand(CommandType.convert);
            cmd.run(op);
        }
    
        /**
         * 等比缩放图片(如果width为空,则按height缩放; 如果height为空,则按width缩放)
         * 
         * @param srcImagePath 源图片路径
         * @param destImagePath 目标图片路径
         * @param width 缩放后的宽度
         * @param height 缩放后的高度
         * @throws Exception
         */
        public static void scaleResize(String srcImagePath, String destImagePath, Integer width,
                Integer height) throws Exception {
            IMOperation op = new IMOperation();
            op.addImage(srcImagePath);
            op.sample(width, height);
            op.addImage(createDirectory(destImagePath));
            ImageCommand cmd = getImageCommand(CommandType.convert);
            cmd.run(op);
        }
    
        /**
         * 从原图中裁剪出新图
         * 
         * @param srcImagePath 源图片路径
         * @param destImagePath 目标图片路径
         * @param x 原图左上角
         * @param y 原图左上角
         * @param width 新图片宽度
         * @param height 新图片高度
         * @throws Exception
         */
        public static void crop(String srcImagePath, String destImagePath, int x, int y, int width,
                int height) throws Exception {
            IMOperation op = new IMOperation();
            op.addImage(srcImagePath);
            op.crop(width, height, x, y);
            op.addImage(createDirectory(destImagePath));
            ImageCommand cmd = getImageCommand(CommandType.convert);
            cmd.run(op);
        }
    
        /**
         * 将图片分割为若干小图
         * 
         * @param srcImagePath 源图片路径
         * @param destImagePath 目标图片路径
         * @param width 指定宽度(默认为完整宽度)
         * @param height 指定高度(默认为完整高度)
         * @return 小图路径
         * @throws Exception
         */
        public static List<String> subsection(String srcImagePath, String destImagePath, Integer width,
                Integer height) throws Exception {
            IMOperation op = new IMOperation();
            op.addImage(srcImagePath);
            op.crop(width, height);
            op.addImage(createDirectory(destImagePath));
    
            ImageCommand cmd = getImageCommand(CommandType.convert);
            cmd.run(op);
    
            return getSubImages(destImagePath);
        }
    
        /**
         * 旋转图片
         * 
         * @param srcImagePath 源图片路径
         * @param destImagePath 目标图片路径
         * @param angle 旋转的角度
         * @return
         * @throws Exception
         */
        public static void rotate(String srcImagePath, String destImagePath, Double angle)
                throws Exception {
            File sourceFile = new File(srcImagePath);
            if (!sourceFile.exists() || !sourceFile.canRead() || !sourceFile.isFile()) {
                return;
            }
    
            BufferedImage buffimg = ImageIO.read(sourceFile);
            int w = buffimg.getWidth();
            int h = buffimg.getHeight();
            // 目标图片
            // if (w > h) { //如果宽度不大于高度则旋转过后图片会变大
            ImageCommand cmd = getImageCommand(CommandType.convert);
            IMOperation operation = new IMOperation();
            operation.addImage(srcImagePath);
            operation.rotate(angle);
            operation.addImage(destImagePath);
            cmd.run(operation);
            // }
        }
    
        /**
         * 获取图片分割后的小图路径
         * 
         * @param destImagePath 目标图片路径
         * @return 小图路径
         */
        private static List<String> getSubImages(String destImagePath) {
            // 文件所在目录
            String fileDir = destImagePath.substring(0, destImagePath.lastIndexOf(File.separatorChar));
            // 文件名称
            String fileName = destImagePath
                    .substring(destImagePath.lastIndexOf(File.separatorChar) + 1);
            // 文件名(无后缀)
            String n1 = fileName.substring(0, fileName.lastIndexOf("."));
            // 后缀
            String n2 = fileName.replace(n1, "");
    
            List<String> fileList = new ArrayList<String>();
            String path = null;
            for (int i = 0;; i++) {
                path = fileDir + File.separatorChar + n1 + "-" + i + n2;
                if (new File(path).exists())
                    fileList.add(path);
                else
                    break;
            }
            return fileList;
        }
    
        /**
         * 创建目录
         * 
         * @param path
         * @return path
         */
        private static String createDirectory(String path) {
            File file = new File(path);
            if (!file.exists())
                file.getParentFile().mkdirs();
            return path;
        }
    
        /**
         * 通过文件名获取文件类型
         *
         * @param fileName 文件名
         */
        private static String getFileType(String fileName) {
            if (fileName == null || "".equals(fileName.trim()) || fileName.lastIndexOf(".") == -1) {
                return null;
            }
            String type = fileName.substring(fileName.lastIndexOf(".") + 1);
            return type.toLowerCase();
        }
    }
    

    4.controller接口类自行实现;

    四、页面制作

    本身不是前端出身,js写的一般般,就不拿出献丑了;效果就是开篇第一张图的样子,

    五、总结

           此demo主要是具备了在线转图的能力,如果商用,需要考虑转图规则、转图存储生成、文件存储、并发操作、文件名重复等诸多问题。主要是如何解决的一个思路,大家共同进步,勉之。

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 活动描述活动流程活动与流程区别:活动可以并发执行动作,流程不可以。描述动态信息。活动基本要素:(开始和结束成对出现)在实际项目中,...对象+消息(方法,名字等)例子:老师让学生发言。老师发出...
  • 图片验证码的例子

    2012-12-07 10:27:08
    图片验证码的简单例子部署即可运行,详情看例子
  • [图片说明](https://img-ask.csdn.net/upload/201607/05/1467704110_315078.png)刚下的vs2015创建的例子部署都失败是什么原因是vs没下完么 还有AVD也打不开点AVD点启动很快就消失了也没有虚拟机出现![图片说明]...
  • eclipse离线安装Activiti Designer插件 最终原创:... activiti快速入门--简单请假例子 最终原创:https://blog.csdn.net/u011320740/article/details/52994361 activiti 会签多实例任务,...
  • Flask部署深度学习模型的一个例子一. Flask二. postman工具 一. Flask 工程一共包括三个文件: 用于测试的图片1.jpg index_to_name.py定义了一个字典,键是预测类label,值是对应的class_name,如下所示: ...
  • 此资源有完整柱状,折线,等例子,下载后可以部署运行,也可参考源码
  • EA里面怎么画这种有图标的部署图

    千次阅读 2014-09-07 15:59:03
    EA里面怎么画这种有图标的部署图       EliteQ(87***60) 10:19:07  请教,EA里面怎么画这种有图标的部署图?   EliteQ(87***60) 10:24:41  我打开了 EA 自带的例子,居然没有摸索...
  • [系分] 部署图

    2017-06-01 15:13:01
    只考三个符号:节点,准线,节点与节点的联系 ... (整个系统就一个)可通过修改下面这个基础模型来做 ...例子: The architect(架构师) studied the use case “打卡”, he want a DB server to hold use
  • 脑图,概念,例子,画图,初认识一步到位
  • MapEasy展示北京地图的例子 一个类似GoogleMap的客户端JS开源库MapEasy以Google Map的方式实现了基本的WebGIS功能和简单地物标注等 。她是一个轻量级的客户端JS库,不需要任何插件,并且与后台数据的获取方式完全...
  • 因工作需求,从网上下载了MyGraph的源代码,与本地一个例子做了一个demo,目前已实现UML图形编辑、本地打开、保存功能(google浏览器已测) 部署到tomcat后,打开URL: ...即可使用
  • 本地部署Apache ,增加PHP支持,ArcGIS API for JS 部署于本地,调用3D和2D地图和图层的例子
  • 软件开发网在以前介绍过关于C#创建、部署、调用WebService的教程,有兴趣的可以参阅:.NET C#创建WebService服务简单实例。本文是通过实例让大家更加详细的了解流程,一起来学习下。 webservice 可以用于分布式应用...
  • RSS读取文本新闻和图片新闻,解决了rss时间上各个feed发布的时间不一致的问题。 <br>里面的RssReader为获取rss频道的主程序,如果想获取其他rss频道的内容,请修改... <br>程序运行部署在jsp服务器上即可看到结果
  • Neo4数据库安装与部署

    千次阅读 2018-07-02 17:33:24
    1:下载数据库 可以根据自己的需要在Neo4j官网上进行下载需要的数据库版本https://neo4j.com/download/other-releases/ 2:解压安装 数据库Neo4基于Java编写的在安装之前要先安装好jdk,本例子基与jdk1.8,...
  •  部署图 部署图用于静态建模,显示了在运行时节点中构件实例所处的环境。...部署图2种表现形式:1、实例层部署图 2、描述层部署图  部署图的事物及其解释:      例子:     ...
  • ansible 容器部署 容器和Ansible完美地融合在一起-从管理和编排到供应和构建。 在本文中,我们将重点介绍建筑部分。 如果您熟悉Ansible,就会知道可以编写一系列任务,而ansible-playbook命令将为您执行这些任务。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 645
精华内容 258
关键字:

部署图例子