Python图像处理库Pillow(PIL)的简单使用
一.PIL和Pillow图像处理库图像库PIL(Python Image Library)是Python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了。PIL原来是只支持python2的版本,后来出现了移植到python3的库pillow,pillow其功能和PIL差不多。 PIL 软件包提供了基本的图像处理功能,如:改变图像大小,旋转图像,图像格式转换,色场空间转换,图像增强,直方图处理,插值和滤波等等。 二.安装PillowPillow 的安装非常简单,不过需要注意 Pillow 和 PIL 不能共存在相同的环境中,因此在安装 Pillow 之前,先要卸载 PIL。命令行下通过 pip 安装: 1pip install pillow 安装完成之后,可以在 Python 的开发环境输入以下代码,测试 Pillow 是否安装成功,以及查看相应的版本号。 123from PIL import Imageprint(Image.VERSION) 注意,虽然使用的是 Pillow,但是导入的包依然是...
Flutter之五Provider状态管理
一. 简介在 Flutter 中,Provider 是一个非常流行且官方推荐的状态管理方案。它通过依赖注入(Dependency Injection)和响应式机制,让 UI 与数据状态解耦,实现“数据改变 → UI 自动刷新”的逻辑。 基于 观察者模式 实现。 它通过 ChangeNotifier 让数据变化自动通知订阅者,解耦 UI 和数据逻辑。 适用场景 单页面状态管理 跨组件/跨路由状态共享 简单全局状态(主题、语言、计数器等) 核心类介绍 ChangeNotifier:一个实现了观察者模式的类,当状态发生变化时,调用’notifyListeners()’方法通知所有监听者更新 ChangeNotifierProvider:一个 Widget,用于在 Widget 树中提供’ChangeNotifier’实例,使其子树中的 Widget 可以访问该实例 Consumer:用于在子 Widget...
Python使用Pyinstaller将源代码打包成exe可执行文件
Pyinstaller简介PyInstaller是Python的第三方打包库,它能够在Windows、Linux、 Mac OS X 等操作系统下将 Python 源文件进行打包,通过对源文件打包,实现将.py扩展名的任何Python的源代码转换成Windows、Linux、Mac OS X下的可执行文件,这样 Python 程序可以在没有安装 Python 的环境中运行。对于Windows来讲,PyInstaller可以将Python源代码打包成.exe的可执行文件,样就可以直接运行程序,不需要安装Python解释器,也不需要对计算机进行相关的环境配置。需要注意的一点是虽然PyInstaller可以在Windows、Mac OS X和Linux上使用,但是并不是跨平台的,如果希望将python源代码打包成.exe文件,需要在Windows系统上运行PyInstaller进行打包工作;需要打包成mac app,则需要在Mac OS上使用PyInstaller进行打包。 使用Pyinstaller打包exe文件安装Pyinstaller模块1pip install...
Linux部署Android打包环境
一.配置JDK、Gradle、Git环境1.安装Java环境(1.)通过apt-get安装Java环境12apt-get updateapt-get install openjdk-8-jdk (2.)通过软件包安装Java环境 下载JDK下载地址。 解压安装包。 配置环境变量。12345678910$ mv jdk1.8.0_161 /usr/local/$ ln -s /usr/local/jdk1.8.0_161 /usr/local/jdk$ vim /etc/profile #配置JDK的环境变量export JAVA_HOME=/usr/local/jdkexport PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATHexport CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar$ source /etc/profile #重新加载系统环境变量$ java -version ...
Android依赖注入框架之Koin
一.依赖引入Koin是一款轻量级的依赖注入框架,根据官方的描述,它无代理,无代码生成,无反射。 12345678def koinVersion = "2.2.2" //Koin for android implementation "org.koin:koin-android:$koinVersion" //Koin for scope feature implementation "org.koin:koin-android-scope:$koinVersion" //Koin for viewModel feature implementation "org.koin:koin-android-viewmodel:$koinVersion" 二.基础使用在application中来做startkoin初始化的动作 123456789101112class MyApp : Application() { override fun onCreate()...
使用Shell脚本助力Linux系统自动化
一.Shell和Shell脚本1.什么是Shell程序对于图形界面例如(Windows,Ios,Android),用户点击某个图标就能启动某个程序;对于命令行,用户输入某个程序的名字(可以看做一个命令)就能启动某个程序。这两者的基本过程都是类似的,都需要查找程序在硬盘上的安装位置,然后将它们加载到内存运行。也就是说图形界面和命令行要达到的目的是一样的,都是让用户控制计算机。真正能够控制计算机硬件(CPU、内存、显示器等)的只有操作系统内核(Kernel), 图形界面和命令行只是架设在用户和内核之间的一座桥梁。由于安全、复杂、繁琐等原因,用户不能直接接触内核(也没有必要),需要另外再开发一个程序,让用户直接使用这个程序; 该程序的作用就是接收用户的操作(点击图标、输入命令),并进行简单的处理,然后再传递给内核。如此一来,用户和内核之间就多了一层“代理”,这层“代理”既简化了用户的操作,也保护了内核。用户界面和命令行就是这个另外开发的程序,就是这层“代理”。在Linux下,这个命令行程序叫做 Shell。 Shell...
Kotlin封装一个DSL语法的DialogFragment
一.领域特定语言 DSL的概念1.什么是DSLDSL(domain specific language),即领域专用语言:专门解决某一特定问题的计算机语言。由于它是以简洁的形式进行表达,整体上直观易懂,使得调用代码和读代码的成本都得以降低,即使是不懂编程语言的一般人都可以进行使用。比如大家比较熟悉的SQL语句和正则表达式。 所谓领域也就是限定语言是适用于一定范围的。可以看做是封装了一套东西, 用于特定的功能, 优势是复用性和可读性的增强。 (1.)DSL的特点 用于专门领域,不能用于其他领域。 有更高级的抽象,不涉及类似数据结构的细节。 表现力有限,其只能描述该领域的模型。 (2.)通用编程语言和DSL的区别:通用编程语言(如 Java、Kotlin、Python等),往往提供了全面的库来帮助开发者开发完整的应用程序,而 DSL 只专注于某个领域,比如 SQL 仅支持数据库的相关处理,而正则表达式只用来检索和替换文本,无法用 SQL 或者正则表达式来开发一个完整的应用。 2.外部 DSL 和内部 DSLDSL分为外部DSL和内部...
Android弹窗BottomSheetDialog总结
圆角效果 先设置原有背景透明 style.xml 1234567<!--实现BottomSheetDialog圆角效果--><style name="BottomSheetDialog" parent="Theme.Design.Light.BottomSheetDialog"> <item name="bottomSheetStyle">@style/bottomSheetStyleWrapper</item></style><style name="bottomSheetStyleWrapper" parent="Widget.Design.BottomSheet.Modal"> <item...
Android数据库Room之二实体之间的关系
一.定义对象之间的关系由于 SQLite 是关系型数据库,因此您可以定义各个实体之间的关系。尽管大多数对象关系映射库都允许实体对象互相引用,但 Room 明确禁止这样做。如需了解此决策背后的技术原因,请参阅了解 Room 为何不允许对象引用。Room 的数据实体类跟数据库表是对应的,所以,有些表关系可以直接通过定义数据实体类之间的关系来实现,这样就可以无需编写 SQL 语句实现插入和查询过操作。 🐼两种可能的方法在 Room 中,您可以通过两种方式定义和查询实体之间的关系:使用具有嵌入式对象的中间数据类或具有多重映射返回值类型的关系型查询方法来建立关系。 🐻中间数据类在中间数据类方法中,您可以定义数据类,以便在 Room 实体之间建立关系。此数据类保存一个实体的实例与另一个实体的实例之间的对应方式(作为嵌入式对象)。然后,查询方法可以返回此数据类的实例,通过此数据类的实例我们就可以拿到对应实体的数据。 例如,您可以定义 UserBook 数据类来表示已借阅特定图书的图书馆用户,并定义一个查询方法用于从数据库中检索 UserBook...