luceda ipkiss教程 45:在版图上加LOGO
2023-12-13 16:54:24
**在设计版图时往往需要加上公司或者学校的LOGO,只需要LOGO的图片,通过代码就可以将LOGO加到版图上,比如:
**
通过代码可以得到版图上的LOGO:
!
代码如下:
from si_fab import all as pdk
from ipkiss3 import all as i3
i3.TECH.PURPOSE.DF.POLYGON = i3.TECH.PURPOSE.DRAWING
i3.TECH.PROCESS.HFW = i3.TECH.PURPOSE.UNUSED
PIL_loaded = False
try:
from PIL import Image
PIL_loaded = True
except:
pass
try:
import Image
PIL_loaded = True
except:
pass
if not PIL_loaded:
raise AssertionError(" PIL should be installed")
class BitmapGrating(i3.PCell):
image = i3.DefinitionProperty()
pixel = i3.ChildCellProperty()
class Layout(i3.LayoutView):
pixel_pitch = i3.Size2Property(default=(2.0, 2.0))
def _generate_instances(self, insts):
im = self.image
w = im.size[0]
h = im.size[1]
pixels = im.getdata()
period_x = self.pixel_pitch[0]
period_y = self.pixel_pitch[1]
for y in range(h):
pen_down = False
for x in range(w):
p = pixels[x + y * w]
if not pen_down:
if p == 0:
pen_down = True
start_x = x
elif not p == 0:
pen_down = False
n_x = x - start_x
if n_x > 1:
insts += i3.ARef(
reference=self.pixel,
origin=(start_x * period_x, -y * period_y),
period=(period_x, period_y),
n_o_periods=(n_x, 1),
)
else:
insts += i3.SRef(reference=self.pixel, position=(start_x * period_x, -y * period_y))
if pen_down:
n_x = x - start_x + 1
if n_x > 1:
insts += i3.ARef(
reference=self.pixel,
origin=(start_x * period_x, -y * period_y),
period=(period_x, period_y),
n_o_periods=(n_x, 1),
)
else:
insts += i3.SRef(reference=self.pixel, position=(start_x * period_x, -y * period_y))
return insts
class BitmapGratingFromFile(BitmapGrating):
image = i3.LockedProperty()
filename = i3.StringProperty()
def _default_image(self):
return Image.open(self.filename).convert("1")
class SquareBitmapGrating(BitmapGrating):
pixel = i3.ChildCellProperty(locked=True)
def _default_pixel(self):
from picazzo3.phc.generic.holes import RectHole
return RectHole(name="{}_pixel".format(self.name))
class Layout(BitmapGrating.Layout):
pixel_size = i3.Size2Property(default=(1.0, 1.0))
layer = i3.LayerProperty(default=i3.TECH.PPLAYER.WG.TEXT)
def _default_pixel(self):
lv = self.cell.pixel.get_default_view(i3.LayoutView)
lv.set(
radii=(0.5 * self.pixel_size[0], 0.5 * self.pixel_size[1]),
process=self.layer.process,
purpose=self.layer.purpose,
)
return lv
class SquareBitmapGratingFromFile(BitmapGratingFromFile, SquareBitmapGrating):
"""Load a bitmap from file and convert it to a grating:
SquareBitmapGratingFromFile(filename = "xxx", pixel_size = (x,y), pixel_pitch = (x,y))
"""
pass
if __name__ == '__main__':
logo = SquareBitmapGratingFromFile(name="logo_fudan", filename="fudan.png")
logo_layout = logo.Layout(pixel_size=(1.5, 1.5), pixel_pitch=(3.0, 3.0))
logo_layout.visualize()
文章来源:https://blog.csdn.net/qq_34316088/article/details/134903560
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!