# font, font_size, scale, spacing; key_color#Python #code 总的弄了一个
class Montage:
def __init__(self, cfg, size):
self.font = cfg.font; self.scale = cfg.scale; self.spacing = cfg.spacing
self.text = cfg.text
self.key_color = cfg.key_color; self.calc_draw_color = cfg.calc_draw_color
self.newSize = tuple(int(sz*cfg.scale) for sz in size)
self.refreshLayout()
def refreshLayout(self):
if len(self.text) == 0: return
self.layout = solveItemLayout(self.newSize, self.font.getsize(self.text[0]), self.scale, self.spacing)
def runOn(self, image):
areas = solveItemColors(image, self.layout)
newImage = Image.new(image.mode, self.newSize, self.key_color)
drawTextMontage(newImage, areas, cycle(self.text), self.font, self.calc_draw_color)
return newImage
Montage 和 runOn,目的是复用 refershLayout 可提供的信息runOn 的逻辑很简单,就是新建一个 mode 一样的 image,然后求颜色、作画。
calc_draw_color 也被合并到 cfg 动态对象里去了Forwarded from dnaugsuz
草,原来绘制和矩阵处理天生不兼容 #CV #Python #visualize
反正我是熟悉 n m y x i j 那一套
可以把 for (i=0; i<n; i++) 套到 绘制程序里
我们只需要往 i, n 扩展一个 j, m 就可以处理项目和 y, x 不匹配的情况
然后矩阵处理又是另一种情况,没有 w,h 什么的
反正我是熟悉 n m y x i j 那一套
可以把 for (i=0; i<n; i++) 套到 绘制程序里
我们只需要往 i, n 扩展一个 j, m 就可以处理项目和 y, x 不匹配的情况
然后矩阵处理又是另一种情况,没有 w,h 什么的
t0 = time()#Python #code
t1 = None
def nextPitch():
try: return next(pitchz)
except StopIteration: raise NonlocalReturn("done")
def doSplit():
synth.noteSwitch(nextPitch())
def giveSegment():
nonlocal t1
t2 = time()
reducer.accept( (t1-t0, t2-t0, synth.last_pitch) )
t1 = t2 #< new start
def onEvent(event):
nonlocal t1
if event.type == pygame.KEYDOWN:
key = chr(event.key)
if key == 'a':
t1 = time()
doSplit()
elif key == 's': giveSegment(); doSplit()
elif event.type == pygame.KEYUP:
key = chr(event.key)
if key == 'a':
synth.noteoff()
giveSegment()
elif key == ' ': onPausePlay()
#Python #code #rewrite
coloredText = StringBuild() # use io.StringIO, equiv []; b''.join(it)
try:
bsText = dLines['text'].encode('utf-8')
except KeyError:
bsText = b64decode(dLines['bytes'])
iNoFmt = 0
spanRange = lambda sp: (sp['start'], sp['end'])
for (iBeg, iEnd) in map(spanRange, spans):
coloredText.write(bsText[iNoFmt:iBeg])
fmtLink = colored(linked(decode(bsText[iBeg:iEnd]), fpAbs, data['line_number'], iBeg), 9)
#^ 9 可提取常量, fpAbs,lineno,offset 应封装为class
coloredText.write(fmtLink.encode())
iNoFmt = iEnd
coloredText.write(bsText[iNoFmt:])
text = decode(str(coloredText))
coloredText = StringBuild() # use io.StringIO, equiv []; b''.join(it)
try:
bsText = dLines['text'].encode('utf-8')
except KeyError:
bsText = b64decode(dLines['bytes'])
iNoFmt = 0
spanRange = lambda sp: (sp['start'], sp['end'])
for (iBeg, iEnd) in map(spanRange, spans):
coloredText.write(bsText[iNoFmt:iBeg])
fmtLink = colored(linked(decode(bsText[iBeg:iEnd]), fpAbs, data['line_number'], iBeg), 9)
#^ 9 可提取常量, fpAbs,lineno,offset 应封装为class
coloredText.write(fmtLink.encode())
iNoFmt = iEnd
coloredText.write(bsText[iNoFmt:])
text = decode(str(coloredText))
#Python #rewrite
from bisect import bisect_left
from sys import argv
def _split2(s): return s.split(' ', 1)
(_sDel, _sData) = ["[%s]\n" %s for s in "Deleted", "Data"]
def readOrigFile(f):
for ln in f: # drop_while
if ln == _sData: break
return [Entry(ln) for ln in f]
def readUserFile(f):
for ln in iter(f, lambda s:s==_sDel):
(i, m) = posEqEntry(orig, ln)
if m: orig.insert(i, Entry(ln))
for ln in f:
(i, m) = posEqEntry(orig, ln)
if m: del orig[i]
def posEqEntry(xs, value):
pos = bisect_left(orig, value)
k = _split2(value)[0]
for (i, e) in enumerate(xs):
ek = _split2(e.value)[0]
if ek != k: break # take_while
if ek == k and e.value == value: return (pos, True)
return (pos, False)
duangsues.is_a? SaltedFish
#Python #rewrite from bisect import bisect_left from sys import argv def _split2(s): return s.split(' ', 1) (_sDel, _sData) = ["[%s]\n" %s for s in "Deleted", "Data"] def readOrigFile(f): for ln in f: # drop_while if ln == _sData: break return [Entry(ln)…
https://t.iss.one/dsuses/4401
重写了一部分,还没起床就不折腾了…… 搞不清 bisect 和这个程序是做什么的就在乱写,差点把 find_entry() -> int(
重写的部分当然比较激进,常量是动态计算的,然后用了 k, e, ek 这些简写法(差点用成 k, for k1in...) posEqEntry 也是不常规的名字(没办法了)
不过我重写的控制流还好,把
while True:
x = xs[i]
if p1(x):
if p2(x): return v1
else: i += 1
else: break
return v2
简化了(其实只需要分析下 i in range(0,len(xs)) 就知道)
但是没有删全局变量(毕竟我不了解问题,或许可以作参数顺序/提升至class )
补充:写错了?
重写了一部分,还没起床就不折腾了…… 搞不清 bisect 和这个程序是做什么的就在乱写,差点把 find_entry() -> int(
重写的部分当然比较激进,常量是动态计算的,然后用了 k, e, ek 这些简写法(差点用成 k, for k1in...) posEqEntry 也是不常规的名字(没办法了)
不过我重写的控制流还好,把
while True:
x = xs[i]
if p1(x):
if p2(x): return v1
else: i += 1
else: break
return v2
简化了(其实只需要分析下 i in range(0,len(xs)) 就知道)
但是没有删全局变量(毕竟我不了解问题,或许可以作参数顺序/提升至class )
补充:写错了?
Telegram
duangsues.is_a? SaltedFish
#Python #rewrite
from bisect import bisect_left
from sys import argv
def _split2(s): return s.split(' ', 1)
(_sDel, _sData) = ["[%s]\n" %s for s in "Deleted", "Data"]
def readOrigFile(f):
for ln in f: # drop_while
if ln == _sData: break
return [Entry(ln)…
from bisect import bisect_left
from sys import argv
def _split2(s): return s.split(' ', 1)
(_sDel, _sData) = ["[%s]\n" %s for s in "Deleted", "Data"]
def readOrigFile(f):
for ln in f: # drop_while
if ln == _sData: break
return [Entry(ln)…