GoJs Pictures 官方介绍文档

图片

      使用Picture类显示图像。 最常见的用法是使用URL字符串设置Picture.source属性,以及通过GraphObject.desiredSize(图对象的所需尺寸)获取或通过设置GraphObject.width(图对象的宽)和GraphObject.height(图对象的高)这两个属性改变图片参数。

       如果URL只是一个简单的常量字符串,则可以将字符串作为参数直接传递给GraphObject.make,而不是分配给“source”属性。 两种方式都具有相同的效果。

         在这些简单的演示,该代码编程方式创建一个区域贴图,并将其添加到图中。 如果你了解模型和数据绑定,一般就不会以编程方式创建区域贴图(节点或链接)。nodes or links

          实际上,并不建议使用 $ 这个默认的符号,因为在Js 中,这个$太敏感。

 
  1. diagram.add(

  2. $(go.Part,

  3. $(go.Picture, "images/100x65.png")

  4. ));

图片是可以拖拉,缩放,通过Delete删除的,建议去官网 进行体验。

        但是,对于更复杂的控件,您可以将Picture.element设置为HTMLImageElement或HTML Canvas元素来进行处理。

Sizing

     如果您没有设置图片的GraphObject.desiredSize,它将获得图片的自然大小。 但是,当您将desiredSize设置为与自然大小不同时,
你还可以通过拉伸或压缩图片以使其适合你的需求。

     以下图片均显示100x65像素的小猫照片。

  • 第一张照片以自然尺寸显示图像。
  • 第二张图片还以自然尺寸显示图像,但显式设置了所需的尺寸。
  • 第三张图片增加了图片的大小,使图像均匀展开。
  • 第四张图片将100x65图像压缩成50x32.5空间 - 一半大小。 这也保持了图像的原始宽高比。
  • 最后一张图片将图片大小设置为50x70,这会将宽高比更改为比原始更高更薄。

 
  1. diagram.add(

  2. $(go.Part, "Table",

  3. $(go.Picture, { source: "images/100x65.png", column: 0,

  4. margin: 2 }),

  5. $(go.TextBlock, "natural", { row: 1, column: 0 }),

  6. $(go.Picture, { source: "images/100x65.png", column: 1,

  7. width: 100, height: 65, margin: 2 }),

  8. $(go.TextBlock, "same size", { row: 1, column: 1 }),

  9. $(go.Picture, { source: "images/100x65.png", column: 2,

  10. width: 200, height: 130, margin: 2 }),

  11. $(go.TextBlock, "bigger", { row: 1, column: 2 }),

  12. $(go.Picture, { source: "images/100x65.png", column: 3,

  13. width: 50, height: 32.5, margin: 2 }),

  14. $(go.TextBlock, "smaller", { row: 1, column: 3 }),

  15. $(go.Picture, { source: "images/100x65.png", column: 4,

  16. width: 50, height: 70, margin: 2 }),

  17. $(go.TextBlock, "stretched", { row: 1, column: 4 })

  18. ));

      加载可能需要一段时间。 在加载到足以知道其自然大小的时间之前,图片可能具有错误的大小,例如0x0。 我们建议你指定desiredSize(或宽度和高度),以便在加载结束后,保持图片的面板不必重新排列。

       对于您无法提前知道目标尺寸的情况,有其他方法比如拉伸图像以适应给定的空间。

图像拉伸

       您可以设置Picture.imageStretch属性来控制绘制图像的大小和宽高比,而不是始终通过拉伸或压缩来满足自己需求的尺寸。

       以下图片演示了Picture.imageStretch的四个可能值。 这里的所有四张图片的大小均为60x80,并显示相同的100x65 PNG文件。 图片也有浅绿色背景,用来显示可能未使用的空间,未使用的部分也是图片的一部分。

  • 第一张图片演示了默认行为,可以向两个方向拉伸。 请注意图像如何变形以使其比应有的更窄。 但是,显示了所有图像。 由于图像填充整个区域并且图像不是半透明的,因此背景颜色不会显示在任何地方。
  • 您可以在第二张图片中看到,使用GraphObject.None的imageStretch,它如何只显示整个小猫图像的一小部分。 因为desiredSize小于图像的自然尺寸,所以图像的一部分被剪裁。
  • 第三张图显示了GraphObject.Uniform imageStretch如何确保显示所有图像,代价是减小比例并在侧面或顶部和底部留下一些空白空间。 在这种情况下,由于自然图像宽高比比可用的60x80宽高比宽,空白区域将位于顶部和底部。
  • 第四张图片显示了GraphObject.UniformToFill imageStretch如何确保整个区域被图像占据,但并非所有图像都被显示,因为有些图像可能会被剪裁在侧面或顶部和底部。 这些图像通常比使用Uniform imageStretch时具有更大的比例。 在这种情况下,必须剪裁的是图像的两侧。
  • 最后,有一个单独的部分包含原始图像,自然大小,用于比较。
 
  1. diagram.add(

  2. $(go.Part, "Table",

  3. $(go.Picture, "images/100x65.png",

  4. { column: 0, width: 60, height: 80, margin: 2, background: "chartreuse",

  5. imageStretch: go.GraphObject.Fill }),

  6. $(go.TextBlock, "Fill", { row: 1, column: 0 }),

  7. $(go.Picture, "images/100x65.png",

  8. { column: 1, width: 60, height: 80, margin: 2, background: "chartreuse",

  9. imageStretch: go.GraphObject.None }),

  10. $(go.TextBlock, "None", { row: 1, column: 1 }),

  11. $(go.Picture, "images/100x65.png",

  12. { column: 2, width: 60, height: 80, margin: 2, background: "chartreuse",

  13. imageStretch: go.GraphObject.Uniform }),

  14. $(go.TextBlock, "Uniform", { row: 1, column: 2 }),

  15. $(go.Picture, "images/100x65.png",

  16. { column: 3, width: 60, height: 80, margin: 2, background: "chartreuse",

  17. imageStretch: go.GraphObject.UniformToFill }),

  18. $(go.TextBlock, "UniformToFill", { row: 1, column: 3 })

  19. ));

  20.  
  21. // The original image sized naturally, for comparison

  22. diagram.add(

  23. $(go.Part, "Vertical",

  24. $(go.Picture, "images/100x65.png"),

  25. $(go.TextBlock, "Original image,\nsized naturally")

  26. ));

剪切图像时,您可以使用Picture.imageAlignment属性控制决定裁剪图像的哪个部分。

剪裁

       如果您的图片必须剪裁为几何图形,例如生成圆形图像,则有两个选项。 第一种是使用“框架”几何体来隐藏部分图像。 通常,此框架的背景颜色与图表背景或节点背景颜色相同。 此方法不会更改图片的真实大小,没有实现透明处理图片,并且单击边界中的任何位置将始终选择图片。

       第二种方法使用Panel.isClipping。 “Spot”面板上的此属性允许主Shape的填充区域用作剪切区域而不是绘制的形状。 此方法不会更改图片的区域,但会影响对象的选取,只能选择绘制的区域; 未绘制的图像区域不能被选中。

对于第一种方式来说,区域 1 , 2 都是可以被选中的,第二种方式只有区域二可以被选中。

 
  1. diagram.layout = $(go.GridLayout);

  2. diagram.initialContentAlignment = go.Spot.Center;

  3.  
  4. // Using a black "frame" geometry to hide part of the image.

  5. // Typically this frame is the same color as the Diagram background or the background of the Node.

  6. diagram.add(

  7. $(go.Part, "Spot",

  8. { scale: 2 },

  9. $(go.Picture, "../samples/images/55x55.png",

  10. {

  11. name: 'Picture',

  12. desiredSize: new go.Size(55, 55),

  13. background: 'red'

  14. }

  15. ),

  16. $(go.Shape,

  17. {

  18. strokeWidth: 0,

  19. stroke: null,

  20. geometryString: "f M0 0 L100 0 L100 100 L0 100 z M5,50a45,45 0 1,0 90,0a45,45 0 1,0 -90,0 z",

  21. width: 56,

  22. height: 56,

  23. fill: 'black'

  24. })

  25. )

  26. );

  27.  
  28. // Using Panel.isClipping

  29. diagram.add(

  30. $(go.Part, "Spot",

  31. { isClipping: true, scale: 2 },

  32. $(go.Shape, "Circle", { width: 55, strokeWidth: 0 } ),

  33. $(go.Picture, "../samples/images/55x55.png",

  34. { width: 55, height: 55 }

  35. )

  36. )

  37. );

  38.  
  39. // Using Panel.isClipping and also having a surrounding panel

  40. diagram.add(

  41. $(go.Part, "Spot",

  42. { scale: 2 },

  43. $(go.Shape, "Circle", { width: 65, strokeWidth: 0, fill: 'red' } ),

  44. $(go.Panel, "Spot",

  45. { isClipping: true },

  46. $(go.Shape, "Circle", { width: 55, strokeWidth: 0 } ),

  47. $(go.Picture, "../samples/images/55x55.png",

  48. { width: 55, height: 55 }

  49. )

  50. )

  51. )

  52. );

 

跨源图片

       由于图片由HTMLImageElements支持,因此它们必须遵守适用于图像的相同跨源(CORS)规则。 如果您使用的图像适用于CORS规则,则可能需要将Picture.sourceCrossOrigin属性设置为返回适当值的函数。 如果提供了sourceCrossOrigin,则函数返回的值将用作任何构造的image.crossOrigin的值。

例:

 
  1. $(go.Picture,

  2. { width: 64, height: 64 },

  3. { sourceCrossOrigin: function(pict) { return "use-credentials"; } },

  4. new go.Binding("source", "path"))

      要返回的常用值是“use-credentials”和“anonymous”,但其他情况可能需要其他值或条件值。 我们建议阅读跨源资源共享文档,以确定适合您情况的方法。

       如果您正在使用Diagram.makeImage,Diagram.makeImageData或Diagram.makeSvg,并且您看到空白或缺少图像,则首先要研究与CORS相关的问题。

使用SVG作为图片源

几乎所有浏览器都接受SVG文件作为图片源,但在许多浏览器中,您必须:

  • 将宽度和高度属性分配给SVG元素。 这些值应该是整数。 (Firefox必备)
  • 为Picture元素指定所需的大小,该大小必须与其width和height属性相同(Internet Explorer必需)。

第一个SVG元素具有在其SVG元素中指定的宽度和高度,并且还具有其期望的大小集。 它应该在大多数浏览器中显示:

 
  1. <svg xmlns="http://www.w3.org/2000/svg"

  2. xmlns:xlink="http://www.w3.org/1999/xlink"

  3. width="580" height="580">

  4. ...

 
  1. diagram.add(

  2. $(go.Part, "Vertical",

  3. $(go.Picture, { desiredSize: new go.Size(580, 580), source: "images/tiger.svg" })

  4. ));

  5. diagram.scale = 0.5;

 

此SVG元素未在其SVG元素中指定width和height属性,因此某些浏览器可能无法呈现它:

 
  1. <svg xmlns="http://www.w3.org/2000/svg"

  2. xmlns:xlink="http://www.w3.org/1999/xlink">

  3. ...

 
  1. diagram.add(

  2. $(go.Part, "Vertical",

  3. $(go.Picture, { source: "images/tiger-noWidthHeightSpecified.svg" })

  4. ));

  5. diagram.scale = 0.5;

 

 

工具:Google Translate

翻译人员: Kindear

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/247497.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎样购买及安装ssl安全证书

查找资料记录&#xff0c;不是我的项目笔记 现在越来越多的网站都开始用安全链接了&#xff0c;在国外的话&#xff0c;如果不是一个安全链接&#xff0c;用户很大程度上会拒绝使用&#xff0c;所有安全链接是未来的趋势&#xff0c;楼主第一次配安全证书的时候&#xff0c;刚刚…

XmlViewResolver 和 ResourceBundleViewResolver

使用XmlViewResolver 如果视图对象的 Bean 数目太多&#xff0c;那么直接在 smart-servlet.xml 文件中配置&#xff0c;势必影响主配置文件的简洁性。XmlViewResolver 和 BeanNameViewResolver 功能相似&#xff0c;唯一不同的是它可以将视图 Bean 定义在一个独立的 XML 文件中…

(转载)Git使用教程:最详细、最傻瓜、最浅显、真正手把手教!

转载自 Git使用教程 预警&#xff1a;因为详细&#xff0c;所以行文有些长&#xff0c;新手边看边操作效果出乎你的预料&#xff09;一&#xff1a;Git是什么&#xff1f; Git是目前世界上最先进的分布式版本控制系统。 工作原理 / 流程&#xff1a; Workspace&#xff1a;工作…

soureTree中如何设置git 用户名与密码 SourceTree提交修改用户详细图文方法

mac上软件更新&#xff1a; 现在没有网络小模块了&#xff0c;在同行右边高级里面有默认用户名删除即可&#xff01;&#xff01;&#xff01;&#xff01; sourceTree 切换Git登录用户&#xff0c;之前在SourceTree提交远程服务用的是同事的账号&#xff0c;同事离职后账号也…

shell 脚本 生成文件,文件名为日期时间

脚本如下 #/bin/bashfilename$(date %Y%m%d)_$(date %H%M%S) touch $filename.txt 其中 $() 表示括号中的 shell 命令的结果&#xff0c;所以 filename 是一个字符串&#xff0c;比如 20190714_111631&#xff0c;即 2019 年 7 月 14 日 11 点 16 分 31 秒。 然后第二行命令&am…

js利用HTML5的拖拽API做流程图

上代码 直接用看效果&#xff0c;学习一下 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Document</title><style type"text/css">#d1{width:800px;height:800px;border: 1…

Pots (BFS ➕ 输出路径)

题目链接&#xff1a;http://poj.org/problem?id3414 思路&#xff1a; 因为有六种操作&#xff0c;所以六种操作中合法的都加入队列中BFS 如何去输出路径呢&#xff1f; 我们不妨设一个string数组&#xff0c;它的索引就和我们的步数有关&#xff0c;然后按顺序输出就可以了…

box-sizing的使用

box-sizing 人们慢慢的意识到传统的盒子模型不直接&#xff0c;所以他们新增了一个叫做 box-sizing 的CSS属性。当你设置一个元素为 box-sizing: border-box; 时&#xff0c;此元素的内边距和边框不再会增加它的宽度。这里有一个与前一页相同的例子&#xff0c;唯一的区别是两…

vue-router的hash模式和history模式,

hash模式背后的原理是onhashchange事件,可以在window对象上监听这个事件: window.onhashchange function(event){ console.log(event.oldURL, event.newURL); let hash location.hash.slice(1); document.body.style.color hash; } 上面的代码可以通过改变hash来改变页面字体…

更新node最新版本方法和 npm install -g n 运行错误

使用xshell连接linux服务器后&#xff0c;首先输入node -v查看当前使用的版本 如果上面查看的版本比较低&#xff0c;则可以开始升级 清除npm cache 升级之前还需要安装n模块&#xff0c;n模块是专门用来管理nodejs的版本 输入npm install -g n n模块安装完成之后&#x…

vue-router的路由

路由和组件是有区别的&#xff1a;组件一般是在同一个页面的不同模块&#xff0c;但是路由是直接切换到另一个页面&#xff0c;之前的页面销毁。 App.vue中的router-view会渲染顶级路由匹配到的组件。组件内部嵌套的router-view会渲染子路由匹配到的组件。 当路由跳转的时候&am…

mac上的更新node npm

查看当前node版本 $ node -v v8.9.4 清除node.js的cache(不确定有没有必要) $ sudo npm cache clean -f Password: npm WARN using --force I sure hope you know what you are doing. 安装工具n &#xff0c;这个工具是专门用来管理node.js版本的 $ sudo npm install -g …

电源芯片选择DC/DC还是LDO?《转》

这个取决于你的应用场合。比如用在升压场合&#xff0c;当然只能用DC/DC&#xff0c;因为LDO是压降型&#xff0c;不能升压。另外看下各自的主要特点&#xff1a; DC/DC:效率高&#xff0c;噪声大&#xff1b; LDO:噪声低&#xff0c;静态电流小&#xff1b; 所以如果是用在压降…

Atom React或前端插件推荐

分享一些Atom个人在用的插件,喜欢请点赞 1. color-picker 取色工具 2. pigments 编辑器中直接查看代码所代表的颜色&#xff0c;工具虽小但是很实用。 3. minimap 仿sublime text的缩略代码查看&#xff0c;想找的地方一目了然。 4. highlight-selected 选择某段代码自动高…

Nike Kyrie 1 Performance Review

Traction – There has been many varying opinions on the Kyrie 1’s traction, and I don’t think any of them have been wrong. I’d say under the right conditions, the traction is excellent. I’ve experienced nothing but great traction out of them, but all o…

Tapable.plugin is deprecated. Use new API on `.hooks` instead

问题描述 在使用extract-text-webpack-plugin给webpack打包时出现报错 Tapable.plugin is deprecated. Use new API on .hooks instead 1 问题原因 extract-text-webpack-plugin目前版本不支持webpack4。 解决方案 使用extract-text-webpack-plugin的最新的beta版 npm inst…

第二周进度总结

本周主要在完成假期作业&#xff0c;学习的时间大部分花在代码上。完成了3个代码的编译。第一个是害死人不偿命的(3n1)猜想。第二个是成绩排名&#xff08;输出成绩最高和成绩最低学生的姓名和学号&#xff09;。第三个是换个格式来输出任一个不超过 3 位的正整数。这三个题目中…

webpack.optimize.CommonsChunkPulgin is not a constructor???请看CommonsChunkPlugin VS SplitChunksPlugin

webpack团队人员卧薪尝胆五个多月的时间终于带来的webpack4&#xff0c;个人觉得webpack4带来的最大优化便是对于懒加载块拆分的优化&#xff0c;删除了CommonsChunkPlugin&#xff0c;新增了优化后的SplitChunksPlugin&#xff0c;那么CommonsChunkPlugin的痛点在哪&#xff1…

多重表(广义表)

在深入浅出数据结构系列前面的文章中&#xff0c;我们一直在讨论“线性表”&#xff0c;其形式如下&#xff1a; 由a1,a2,a3,……a(n-1)个元素组成的序列&#xff0c;其中每一个元素ai(0<i<n)都是一个“原子”&#xff0c;“原子”的意思就是说元素本身是一个个体&#x…

简单教你React父子组件间平级组件间传值

国庆充电特辑&#xff1a; 堵车堵死&#xff0c;废话不多说直接上菜。 1.父组件对子组件传值 利用props属性传值 class Component extends React.Component {constructor (props) {super(props);}render() {return (<div><h1>I am {this.props.name}</h1>…