duangsuse::Echo
我不是很喜欢最后那个算 padLeft 和 padUp 的 大致就是 lineW = (cfg.font_size + sp_h) * scale lineH = (cfg.font_size + sp_v) * scale cols = int(image.width / lineW) rows = int(image.height / lineH) padLeft = (image.width - (cols*lineW) + sp_h) /2 padTop = (image.height - (rows*lineH)…
(h_sp, v_sp) = spacing
(w_item, h_item) = (d+sp for d, sp in zip((font_size, font_size), (h_sp, v_sp)) )
(m, n) = (int(full/d) for full, d in zip((width, height), (w_item, h_item)) )
padLeft = (width - (m*w_item) + sp) /2
padTop = (height - (n*h_item) + sp) /2 🤔 两点。 (0) 即便
width - (m*w_item) aka. width - (int(width/w_item) *w_item) 可以用 width % w_item 替换(并且甚至可以上 Python 的 divmod)我也没用(因为我没发现不止可以用 divmod,哈哈)(1)
(a/2+b/2) 不是永远都可以合并去 (a+b)/2 的,比如浮点高精度,但这里可以。(2) 即便可以把 padLeft, padTop 写成 value destruct 的形式,我也没那么写,
duangsuse::Echo
(h_sp, v_sp) = spacing (w_item, h_item) = (d+sp for d, sp in zip((font_size, font_size), (h_sp, v_sp)) ) (m, n) = (int(full/d) for full, d in zip((width, height), (w_item, h_item)) ) padLeft = (width - (m*w_item) + sp) /2 padTop = (height - (n*h_item) + sp)…
下文直接上骚操作:
*最后一条 zip(a, b, c) 真心不推荐,这条是真闹着玩的。
(width, height) = imageBounds(image)
global font_size
(h_sp, v_sp) = spacing
(w_item, h_item) = (font_size+sp for sp in (h_sp, v_sp) )
(m, n) = (int(full / item) for (full, item) in zip((width, height), (w_item, h_item)) )
(padLeft, padTop) = (int( (full % item + sp) /2) for (full, item, sp) in zip((width, height), (w_item, h_item), (h_sp, v_sp)) ) *最后一条 zip(a, b, c) 真心不推荐,这条是真闹着玩的。
duangsuse::Echo
这段代码可不止是我意淫出来的,而是真的可以用 :P (虽然这个例子相对简单)
for i in range(0, n):
x_text = padLeft
for j in range(0, m):
area = (x_text, y_text, x_text+w_text, y_text+h_text)
shadow = image.crop(*area)
x_text += w_item
avgc, is_draw = averageColor(shadow)
if not is_draw: continue
draw.text(area[0:2], next(chars), font=font, color = avgc if cfg.font_color == None else cfg.font_color )
y_text += h_item 这段代码也不是我瞎写的,也是真的可以用(
最喜欢能够直接替换上去,试运行的代码了
cfg.font_color = rgbColorBack(cfg.font_color) if cfg.font_color != None else None这个调试过才是可以直接替换的(看来还是不能脱机颅内执行
y_text = padTop
for i in range(0, n):
x_text = padLeft
for j in range(0, m):
area = (x_text, y_text, x_text+w_item, y_text+h_item)
shadow = image.crop(area)
x_text += w_item
avgc, is_draw = getAvgColor(shadow, keyc)
if is_draw:
draw.text(area[0:2], next(chars), font=font, fill = cfg.font_color or rgbColorBack(avgc))
y_text += h_item
duangsuse::Echo
不过,我对 y=padTop; for i { x=padLeft for j { x+=w } y+=h } 这种风格好像也没本质帮助,要好好重构只能上 LayoutPlanner 了(
不过虽然不能杜绝这种
很简单,不一定要给 i, j 留位置因为它们根本就没被引用!实际上它们只是相对于 x, y 的“计数变量” (
亲数学系的程序员也可以用
不过反正 Python 和 Kotlin 一样提供了 range(不知道一些静态语言为什么没有,emmm),所以只需要
y=padTop; for i { x=padLeft; for j { x+=w } ; y+=h } 的风格,要说方法倒是也有很简单,不一定要给 i, j 留位置因为它们根本就没被引用!实际上它们只是相对于 x, y 的“计数变量” (
i, y = enumerate(range(y_min, y_max))) 而已。亲数学系的程序员也可以用
i*h_item 直接替代 y,如果你不嫌每次算很麻烦的话(不过这倒是一种很吸引人的做法……因为这样就可以并行计算,虽然众所周知绘制都一般是单线程的)不过反正 Python 和 Kotlin 一样提供了 range(不知道一些静态语言为什么没有,emmm),所以只需要
for y in range(0, height, h_item) 即可…… 连 i, j 和 n, m 都省了 😂 反正 n = height/h_item
duangsuse::Echo
不过虽然不能杜绝这种 y=padTop; for i { x=padLeft; for j { x+=w } ; y+=h } 的风格,要说方法倒是也有 很简单,不一定要给 i, j 留位置因为它们根本就没被引用!实际上它们只是相对于 x, y 的“计数变量” (i, y = enumerate(range(y_min, y_max))) 而已。 亲数学系的程序员也可以用 i*h_item 直接替代 y,如果你不嫌每次算很麻烦的话(不过这倒是一种很吸引人的做法……因为这样就可以并行计算,虽然众所周知绘制都一般是单线程的)…
#Learn #dev #tip 有些人可能看不习惯 n_item, x_item, y, h, w, i, j, n, m, 甚至 h(orizontal), v(ertical) 这类缩写中 n x y 这样的字符总被放前面的情况(
其实在物理式子的命名里,这种做法很流行(事实上,物理系命名法相当接近日常编程会使用的命名方式了,它一点也不“数学”),它把“类型”缩写放在命名的头部。
众所周知,本 duangsuse 是推崇零文档的(代码就是最好的文档
而不是把文档写成逻辑的重复,文档只应描述一些特殊的值/状态要求。
一般我们说“中文编程”排除某些“机器翻译”实例之外,另一些实例不能写出优雅好看的大项目的原因也在于此——相较英文,中文把最能体现一个句子意图的词放在了最后面,这个问题使得它在程序设计上阅读起来有点不舒服。
其实在物理式子的命名里,这种做法很流行(事实上,物理系命名法相当接近日常编程会使用的命名方式了,它一点也不“数学”),它把“类型”缩写放在命名的头部。
众所周知,本 duangsuse 是推崇零文档的(代码就是最好的文档
而不是把文档写成逻辑的重复,文档只应描述一些特殊的值/状态要求。
一般我们说“中文编程”排除某些“机器翻译”实例之外,另一些实例不能写出优雅好看的大项目的原因也在于此——相较英文,中文把最能体现一个句子意图的词放在了最后面,这个问题使得它在程序设计上阅读起来有点不舒服。
./Montage.py -seq 'DOGE酱' -font-size 8 -spacing :-5,-5 -font /usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc --draw-color-code 'averageColorIfDifferThreshold(it,(0x8f,0x79,0x52))' --new-image-code 'cloneImageColored(it, (0x8f,0x79,0x52))' -scale 2.0 ~/图片/v2-20e303a57602cb2a062018baf28b6f62_720w.jpg Good Ending ✅所以说我会重写的,不过到此为止算了(下一步再维护的话就得做子贴图而非文本绘制了,而且argparse也要改…… 算了
目前这个也是没用到
目前这个也是没用到
AllFold,只有 MapFold 的。Forwarded from duangsuse Throws
#dev #JavaScript #Haha 草,我竟然做出来了……
一个车夫,赶着1辆马车,车上坐着5个人,每人拿着5个袋子,每个袋子里装着5只大猫,
每只大猫带5只小猫,每只小猫带着5只老鼠干粮
问:这道题里一共有多少条腿? 😂
衬衫的价格是 9 磅 15 便士。ES6。
一个车夫,赶着1辆马车,车上坐着5个人,每人拿着5个袋子,每个袋子里装着5只大猫,
每只大猫带5只小猫,每只小猫带着5只老鼠干粮
问:这道题里一共有多少条腿? 😂
衬衫的价格是 9 磅 15 便士。ES6。
constanswer = cheche(1) //13104
laoshu = n => n*4,
mao = n => laoshu(n)*5 + 4,
bigmao = n => mao(n)*5 + 4,
daizi = n => bigmao(n)*5,
ren = n => daizi(n)*5 + 2,
cheche = n => 2 + ren(5);
duangsuse Throws
#dev #JavaScript #Haha 草,我竟然做出来了…… 一个车夫,赶着1辆马车,车上坐着5个人,每人拿着5个袋子,每个袋子里装着5只大猫, 每只大猫带5只小猫,每只小猫带着5只老鼠干粮 问:这道题里一共有多少条腿? 😂 衬衫的价格是 9 磅 15 便士。ES6。 const laoshu = n => n*4, mao = n => laoshu(n)*5 + 4, bigmao = n => mao(n)*5 + 4, daizi = n => bigmao(n)*5, ren = n…
给本频道的大佬们再出一道题。 (这道是真难度 😂)
现在已经知道了有 13104 条腿和给定算式,如何知道:
有多少个车夫、多少辆马车,多少个人、多少个袋子、多少只大猫、多少只小猫、多少只老鼠
现在已经知道了有 13104 条腿和给定算式,如何知道:
有多少个车夫、多少辆马车,多少个人、多少个袋子、多少只大猫、多少只小猫、多少只老鼠