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;刚刚…

(转载)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;同事离职后账号也…

box-sizing的使用

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

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

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

Atom React或前端插件推荐

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

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;我们一直在讨论“线性表”&#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>…

Requests库的主要方法:requests.request为requests.get和requests.post两个的汇总,只是需要传方法...

1. requests.request(method,url,**kwargs&#xff09; method&#xff1a;请求方式&#xff0c;对应get/put/post等七种&#xff1a;拟获取页面的url链接&#xff1a;控制访问参数&#xff0c;共13个method&#xff1a;请求方式rrequests.request(GET,url,**kwargs) r reques…

jQuery插件开发教程

jQuery插件开发精品教程&#xff0c;让你的jQuery提升一个台阶 要说jQuery 最成功的地方&#xff0c;我认为是它的可扩展性吸引了众多开发者为其开发插件&#xff0c;从而建立起了一个生态系统。这好比大公司们争相做平台一样&#xff0c;得平台者得天下。苹果&#xff0c;微软…

微服务深入浅出(7)-- 网关路由Zuul

Zuul用于构建边界服务&#xff0c;致力于动态路由&#xff0c;过滤&#xff0c;监控&#xff0c;弹性伸缩和安全等方向。 1、ZuulRibbonEureka结合&#xff0c;可以实现智能路由和负载均衡 2、网关将所有服务的API接口统一聚合统一暴露 3、网关统一爆率接口后&#xff0c;可以做…

C# webkit内核 网页填表

比如我要操作的是下面的input 用到的方法是 调用如下&#xff1a; webkit.StringByEvaluatingJavaScriptFromString("document.getElementsByClassName(login_i_con_li_ipt name)[0].valueThis is a Demo."); 类似这种div在webkit中好像是无法通过常规方法模拟的 这时…

p字间距 html段落内文字设置字间距间隔

只对段落p内文字设置字间距&#xff0c;段落<p>是html段落标签&#xff0c;以<p>开始&#xff0c;以</p>结束&#xff0c;通常文章分段使用p标签&#xff0c;而有时小局部布局也可以使用p来布局。通过css设置其样式实现排版目的。 这里针对p设置字间距&…

基本数据类型

上节回顾 1.循环打印数列1&#xff0c;3&#xff0c;5&#xff0c;.........&#xff0c;99 for i in range(100):if i%21:print (i) 2.turtle 库 # penup 抬笔 # pendown 落笔 # pensize 画笔大小 # pencolor 画笔颜色## 画笔运动函数 # fd 前进 # bk 后退 # goto 到达指定的坐…

修改系统默认 alert 弹框样式

修改默认 alert 弹框&#xff0c;思路很简单&#xff0c;定义一个 alert(e) 函数&#xff0c;加载最开头即可。 css部分&#xff1a; <style>#msg{width:266px;position: fixed;z-index:999;top: 49%;margin-top:-80px;left:50%;margin-left:-133px;background:#fff;bo…

:nth-child(n)与:nth-of-type(n)为啥显示不对呢

首先是二者的区别 :nth-child(n) 是选择父元素的第n个子元素。 :nth-of-type(n) 是选择父元素的第n个同类型的子元素 举个例子&#xff1a; <div class"read"><h1>title</h1><p>paragraph1</p><p>paragraph2</p> <!…

css3 box-shadow阴影(内外阴影与发光)讲解

基础说明&#xff1a; 外阴影&#xff1a;box-shadow: X轴 Y轴 Rpx color; 属性说明&#xff08;顺序依次对应&#xff09;&#xff1a; 阴影的X轴(可以使用负值) 阴影的Y轴(可以使用负值) 阴影模糊值&#xff08;大小&#xff09; 阴影的颜色 内阴影&#xff1a;b…

远程链接错误:这可能是由于credssp加密oracle修正

此错误解决办法 1.WinR 输入regedit打开注册表 找到对应的以下目录HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System 此时如果System下没有CredSSP时创建CredSSP没有Parameters时,创建Parameters 创建方法:右建>>新建>>项 2.在Para…

SpringBoot入门最详细教程

https://www.jianshu.com/p/af3d5800f763 网上有很多springboot的入门教程&#xff0c;自己也因为项目要使用springboot&#xff0c;所以利用业余时间自学了下springboot和springcloud&#xff0c;使用下来发现springboot还是挺简单的&#xff0c;体现了极简的编程风格&#xf…