PyCairo 中的图片
PyCairo 教程的这个部分,我们将讨论图片。我们将演示如何在 GTK 窗口中显示一幅 PNG 或JPEG 图片。我们也将在图片上绘制一些文字。
显示一幅 PNG 图片
在第一个例子中,我们将显示一幅 PNG 图片。
#!/usr/bin/python'''
ZetCode PyCairo tutorialThis program shows how to draw
an image on a GTK window in PyCairo.author: Jan Bodnar
website: zetcode.com
last edited: August 2012
'''import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
import cairoclass Example(Gtk.Window):def __init__(self):super(Example, self).__init__()self.init_ui()self.load_image()def init_ui(self):darea = Gtk.DrawingArea()darea.connect("draw", self.on_draw)self.add(darea)self.set_title("Image")self.resize(300, 170)self.set_position(Gtk.WindowPosition.CENTER)self.connect("delete-event", Gtk.main_quit)self.show_all()def load_image(self):self.ims = cairo.ImageSurface.create_from_png("stmichaelschurch.png")def on_draw(self, wid, cr):cr.set_source_surface(self.ims, 10, 10)cr.paint()def main():app = Example()Gtk.main()if __name__ == "__main__":main()
这个例子显示一幅图片。
self.ims = cairo.ImageSurface.create_from_png("stmichaelschurch.png")
我们由一幅 PNG 图片创建一个图片 surface。
cr.set_source_surface(self.ims, 10, 10)
我们将前面创建的图像 surface 设为 source 用于绘制。
cr.paint()
我们将 source 绘制在窗口中。
显示一幅 JPEG 图片
PyCairo 只内建了对 PNG 图片的支持。其它的图片可以通过 gtk.gdk.Pixbuf
对象来显示。它是一个用于管理图像的 GTK 对象。
#!/usr/bin/python'''
ZetCode PyCairo tutorialThis program shows how to draw
an image on a GTK window in PyCairo.author: Jan Bodnar
website: zetcode.com
last edited: August 2012
'''import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk, GdkPixbuf
import cairoclass Example(Gtk.Window):def __init__(self):super(Example, self).__init__()self.init_ui()self.load_image()def init_ui(self):darea = Gtk.DrawingArea()darea.connect("draw", self.on_draw)self.add(darea)self.set_title("Image")self.resize(300, 170)self.set_position(Gtk.WindowPosition.CENTER)self.connect("delete-event", Gtk.main_quit)self.show_all()def load_image(self):self.pb = GdkPixbuf.Pixbuf.new_from_file("stmichaelschurch.jpg")def on_draw(self, wid, cr):Gdk.cairo_set_source_pixbuf(cr, self.pb, 5, 5)cr.paint()def main():app = Example()Gtk.main()if __name__ == "__main__":main()
在这个例子中,我们在窗口中显示了一幅 JPEG 图片。
from gi.repository import Gtk, Gdk, GdkPixbuf
除了Gtk,我们还需要 Gdk 和 GdkPixbuf 模块。
self.pb = GdkPixbuf.Pixbuf.new_from_file("stmichaelschurch.jpg")
我们由一个 JPEG 文件创建一个 GdkPixbuf.Pixbuf
。
Gdk.cairo_set_source_pixbuf(cr, self.pb, 5, 5)cr.paint()
Gdk.cairo_set_source_pixbuf()
方法将 pixbuf 设为 source 以用于绘制。
水印
在图片上绘制信息很常见。绘制到图片上的文字称为水印。水印用于标识图片。它们可能是版权信息或图片的创建时间。
#!/usr/bin/python'''
ZetCode PyCairo tutorialThis program draws a watermark
on an image.author: Jan Bodnar
website: zetcode.com
last edited: August 2012
'''import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
import cairoclass Example(Gtk.Window):def __init__(self):super(Example, self).__init__()self.init_ui()self.load_image()self.draw_mark()def init_ui(self):darea = Gtk.DrawingArea()darea.connect("draw", self.on_draw)self.add(darea)self.set_title("Watermark")self.resize(350, 250)self.set_position(Gtk.WindowPosition.CENTER)self.connect("delete-event", Gtk.main_quit)self.show_all()def load_image(self):self.ims = cairo.ImageSurface.create_from_png("beckov.png")def draw_mark(self):cr = cairo.Context(self.ims)cr.set_font_size(11)cr.set_source_rgb(0.9, 0.9, 0.9)cr.move_to(20, 30)cr.show_text(" Beckov 2012 , (c) Jan Bodnar ")cr.stroke()def on_draw(self, wid, cr):cr.set_source_surface(self.ims, 10, 10)cr.paint()def main():app = Example()Gtk.main()if __name__ == "__main__":main()
我们在一幅图片上绘制版权信息。
def load_image(self):self.ims = cairo.ImageSurface.create_from_png("beckov.png")
在 load_image()
方法中,我们由一幅 PNG 图片创建一个图片 surface。
def draw_mark(self):cr = cairo.Context(self.ims). . .
在 draw_mark()
方法中,我们将版权信息绘制到图片上。首先,我们由图像surface 创建一个绘制上下文。
cr.set_font_size(11)cr.set_source_rgb(0.9, 0.9, 0.9)cr.move_to(20, 30)cr.show_text(" Beckov 2012 , (c) Jan Bodnar ")cr.stroke()
然后以白色绘制一段小文字。
def on_draw(self, wid, cr):cr.set_source_surface(self.ims, 10, 10)cr.paint()
最后,将图片 surface 绘制到窗口中。
这一章,我们讨论了 PyCairo 中的图片。
原文
Done.
PyCairo 中的图片相关推荐
- PyCairo 中的剪裁和屏蔽
在 PyCairo 教程的这个部分,我们将讨论剪裁和屏蔽操作. 剪裁 裁剪 是将绘制限定在某一区域内.这样做有一些效率的因素,或者为了创建有趣的效果.PyCairo 有一个 clip() 方法用于设置 ...
- 如何在ASP.Net 中把图片存入数据库
介绍 可能有很多的时候,我们急需把图片存入到数据库当中.在一些应用程序中,我们可能有一些敏感的资料,由于存储在文件系统(file system)中的东西,将很容易被某些用户盗取,所以这些数据不能存放在 ...
- 在DataGrid中显示图片
兼谈 DadaGrid 模板列的创建 DadaGrid 是 ASP.NET 编程中一个很重要的控件,其优良的可定制功能为提高它的表现力提供了极大的方便.除了与数据源直接绑定以外,我们还可以通过列绑定模 ...
- matlab读取一个文件的图片大小,Matlab读取文件夹中子文件夹中的图片并修改尺寸...
今天被师兄问到如何利用matlab批处理图片,觉得很简单嘛 就让他去百度 结果只百度到处理文件夹中图片的程序 好吧 这里放上如何处理文件夹中子文件夹的图片 现状:在一个名为casia的文件夹中,里面有 ...
- java 移动页面中的图片上传_移动端图片操作——上传
上传我们一般都是用"input[type=file]"控件.当你用此控件时,你就授权了网页和服务器访问对应的文件,就可以得到File对象. 友情提示在,在Android手机webv ...
- UIWebView保存网页中的图片(转载)
现在H5混合原生开发的方式越来越流行,也就要用到UIWebView控件.在开发过程中,我们可能会遇到一个需求,要求我们保存网页上的图片,当用户点击图片的时候,就可以让用户选择是否下载图片. 在系统自带 ...
- 将ImageVIew中的图片保存到本地相册中
2019独角兽企业重金招聘Python工程师标准>>> 一:将ImageView中的图片转换成Bitmap 二:将Bitmap 转换成二进制,写入本地 三:用广播通知相册进行更新相册 ...
- R语言ggplot2可视化在可视化的接种中插入图片、添加图片实战
R语言ggplot2可视化在可视化的接种中插入图片.添加图片实战 目录 R语言ggplot2可视化在可视化的接种中插入图片.添加图片实战
- word 数组 转 指针_Word之VBA丨文档中的图片怎样批量加边框?
不称深度指南,只愿浅度指北 很多时候,我们在 Word 中添加的图片,大部分都是类似下面这样"白底黑图"的: 如果图片内容是一段文字,就更加大了我们对文章的理解难度. 这时,我会给 ...
最新文章
- 4.9---4.16总结
- LINQ to SQL语句(4)之Join
- linux 文件删除恢复
- Excel基础操作(二)
- 用 div 仿写 input 和 textarea 功能
- php基础教程 第九步 自定义函数
- bean交个spring和new比较区别
- 第三十六期:人工智能统计调查:86%的消费者更喜欢人工客服
- shell下数字和字符串比较操作命令
- leetcode题解279-完全平方数
- Python使用reduce()函数计算多个集合的并集与交集
- 《统计学习方法》——决策树
- Mac Brew Uninstall MySql
- android 蓝牙 录音,Android 实现蓝牙录音
- 华光职业学院计算机专业,关于给予张庆俊等同学省高校计算机一级 考试成绩优秀奖励的通知...
- 计算机usb接口不工作原理,电脑usb接口不能用,详细教您电脑usb接口不能用怎么办...
- read/write函数
- 黑龙江软件第三方检测机构/软件登记(退税)测试报告
- Java-dao模式
- EXCEL2003版无法运行2007以上版本VBA程序
热门文章
- 三层架构介绍和MVC设计模型介绍
- SpringBoot异常处理-@ExceptionHandler
- 设置eclipse新建maven项目默认使用jdk1.8
- 方法的重写-扩展父类方法,super对象调用父类方法
- 为元素绑定多个相同事件 绑定事件的另一种方式 复习 介绍 元素的事件绑定
- 数字转换英语c语言程序,c语言 把英文数字 例如 one hundred and eleven 转换位数字 111;怎样编写程序,要求1~1000内的英文数字...
- cJSON_译(C中的超轻量级JSON解析器)
- 探析“Java序列化”之serialVersionUID
- saltstack配置apache
- hadoop之 YARN配置参数剖析—RM与NM相关参数