最近入手了 ESP32 WROOM 32E 模组,记录一下刷入 MicroPython 固件的过程。
是否有Python PIL的抗锯齿方法?
在进行SVG转换成PNG图片的时候,后续对转换后的图片使用PIL进行操作,结果发现锯齿严重。经过网上搜到,发现只能通过超采样然后缩放的方式来进行抗锯齿操作,效果还不错。
代码参考如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import os import math import cairosvg temp_image = os.path.join(fileDir, "splash.png") # PIL 本身不具备抗锯齿功能,输出的图片锯齿严重,我们进行四倍超采样,然后缩放的方式进行抗锯齿操作 scale = 4.0 # background_color='#FFFFFF' # 注意如果不设置DPI,默认dpi是96 人眼低于326dpi的可见明显锯齿 cairosvg.svg2png(url=raw, write_to=temp_image, output_width=math.ceil(image_width*scale), dpi=400, output_height=math.ceil(image_height*scale)) from PIL import Image bg = Image.new("RGBA", (math.ceil(output_width*scale), math.ceil(output_height*scale))) fg = Image.open(temp_image) bg.paste(fg, (math.ceil((output_width - image_width)*scale/2), math.ceil((output_height - image_height)*scale/2)), fg) bg.resize((output_width, output_height), Image.ANTIALIAS); bg.save(out) os.remove(temp_image) |
参考链接
Flutter如何将文本与图片混合编辑?(功能扩展篇)
前言
一个优秀的富文本,应该包含优秀的排版算法、丰富的功能和渲染的高性能。在上一篇中,我们实现了可扩展的、基础的富文本编辑器。那么在本文中,让我们对富文本进行更多功能的扩展。
注:
— 为了在阅读本文时有更好的体验,请先阅读本专栏第一篇,前文涉及到的知识点,本文不再赘述。(摸鱼的朋友请忽略)
— 完整代码太多, 文章只分析核心代码,需要源码请到 代码仓库
文本与图片混排
在有关富文本的业务需求中,或其他文章渲染中,图文混排的功能是十分重要的。在Flutter中,为了解决这个图文混排的问题,有一个很方便的组件:WidgetSpan
。而在本专栏的第一篇的文本基础知识中,已经分析了TextSpan
在文本渲染过程中的作用。那么WidgetSpan
是如何被渲染的呢,Flutter又是如何将TextSpan
与WidgetSpan
混合渲染在一起的呢?
—— 效果图完整代码在仓库demo/image_text
Flutter从0到1实现高性能、多功能的富文本编辑器(基础实战篇)
前言
在上一章中,我们分析了一个富文本编辑器需要有哪些模块组成。在本文中,让我们从零开始,去实现自定义的富文本编辑器。
注:本文篇幅较长,从失败的方案开始分析再到成功实现自定义富文本编辑器,真正的从0到1。建议收藏!
— 完整代码太多, 文章只分析核心代码,需要源码请到 代码仓库,也可在本站下载代码拷贝。
错误示范
遭一蹶者得一便,经一事者长一智。——宋·无名氏《五代汉史平话·汉史》
在刚开始实现富文本时,为了更快速的实现富文本的功能,我利用了TextField这个组件,但写着写着发现TextField有着很大的局限性。不过错误示范也给我带来了一些启发,那么现在就让我和大家一起去探索富文本编辑器的世界吧。
Flutter从0到1实现高性能、多功能的富文本编辑器(模块分析篇)
前言:
经过前面两篇文章的基础知识铺垫,我们终于要进入到专栏的核心内容 — 富文本。富文本编辑器可以说是APP中最复杂,但使用场景又极广的组件之一。例如各大笔记APP的核心功能、闲鱼的商品发布功能、还有掘金APP的发布文章&发布沸点功能等,可以说是富文本编辑器让用户能以更简单更便携的方式记录内容。不过Flutter只有最基础的文本编辑组件TextField,在遇到复杂场景时就比较吃力了,例如图片的添加,有序段落.....本文通过分析市场上的各大富文本编辑器的功能和Flutter优秀的富文本插件,从而来自定义自己的富文本编辑器,与大家一起探索文本的世界...
注:Flutter目前已经有许多优秀的开源富文本编辑器,例如:flutter_quill。为了更好的实现属于自己的`富文本编辑器,我们必须要先了解&学习这些优秀的开源项目。
Android 的键值对存储有没有最优解?
正文
这是我在网上找到的一份 Android 键值对存储方案的性能测试对比(数越小越好):
可以看出,DataStore 的性能比 MMKV 差了一大截。MMKV 是腾讯在 2018 年推出的,而 DataStore 是 Android 官方在 2020 年推出的,并且它的正式版在 2021 年 8 月才发布。一个官方发布的、更(gèng)新的库,性能竟然比不过比它早两年发布的、第三方的库。而且我们能看到,更离谱的是,它甚至还比不过 SharedPreferences 。Android 官方当初之所以推出 DataStore,就是要替代掉 SharedPreferences,并且主要原因之一就是 SharedPreferences 有性能问题,可是测试结果却是它的性能不如 SharedPreferences。
所以,这到底是为什么?
日文邮件网络钓鱼活动
最近一年,频繁收到自称是亚马逊日本/日本其他银行的邮件,没完没了,很像是官方邮件,差一点就信了。网上搜寻了一下,发现还是蛮常见的。
自2020年8月以来,Proofpoint研究人员就追踪到了大量的Amazon Japan认证和信息钓鱼攻击活动,可疑活动可以追溯到2020年6月。这些邮件冒充Amazon Japan,暗示收件人需要检查自己的账户,以“确认所有权”或“更新支付信息”。点击邮件中的一个链接,收件人就会被重定向到以亚马逊为主题的凭证式钓鱼登陆页面,该页面收集凭证、个人识别信息(PII)和信用卡号码。攻击者会向总部设在日本的机构和在日本有活动的机构发送了这些信息,这些网页的地理定位是为了确保只有日本的收件人被重定向到认证钓鱼页面。
虽然像亚马逊这样的知名品牌经常在网络钓鱼活动中被滥用但大量的邮件使这些活动与其他亚马逊品牌的活动区分开。这些活动持续不断,每天发送数十万条信息。截至10月中旬,,有时一天中可以看到超过一百万条信息,与Emotet发送的信息量相当。Emotet是一种主要通过垃圾邮件进行传播的木马,传播至今,已进行过多次版本迭代。
Flutter — 文本为什么可以被编辑?如何自定义编辑的行为?
前言:
在上一篇文章中,我们讲解了Flutter文本的组成部分和Flutter 文本渲染到屏幕上的逻辑。文本的输出我们已经分析完成了,那么文本的输入又是怎么样的呢?在Flutter中,我们知道文本的输入可以通过TextField
等组件将文字输入到App中,但是它背后的原理是什么呢,为什么可以编辑文本呢?在这一篇文章中,就让我们从Flutter的可编辑文本的实现原理,再到自定义可编辑的文本...希望能对你认识Flutter的文本编辑有所帮助。
注:本文的涉及较多文本编辑的核心逻辑,和大量的功能实践,建议收藏!
解决亚马逊网站开通两步验证无法收到短信
最近经常收到亚马逊的邮件通知,说是自己的账号被从其他设备上频繁尝试登录,导致账号暂时被禁用。
明显是有人在尝试破解账号密码。
登录账号,本能选择手机短信认证,结果,尝试非常多次,收不到短信!!!
只能退而求其次,使用“认证器应用程序”来替代。如下图:
结果,国内手机的Android应用商店上都搜不到,不管是 Google 的还是亚马逊自己的,或者微软的!!
从第三方下载又不放心!!
一时不知道改怎么操作了,结果突然想起自己还有一部 iPhone 开发手机,于是从Apple应用商店搜索 "Google Authenticator", 果真可以直接使用,于是问题搞定。
参考链接
Flutter中那些你需要知道的文本知识!
前言
文字是记录语言的书写符号系统,是形、音、义的统一体,是人类最重要的辅助性 交际工具。作为一个Flutter开发者,我们都知道可以通过Text()
这个文本组件将文字显示出来。但是这其中的Flutter的字体是怎么组成的?Flutter文本是怎么构建的?Render Tree
是怎样绘制文本的.....作为本专栏(整个专栏都在与文本打交道)的第一篇文章,让我们从这些原理细节讲起。希望能对你认识Flutter的文本渲染有所帮助。
注:本文的目的在于让大家了解Flutter中的基本文本知识,快速的带大家了解渲染流程,但并未很深入的分析Flutter文本渲染的原理。