import os,math,time
from PIL import Image
def FUNChexagonimage(STRfilenamein,STRfilenameout):
INTbegintime=time.perf_counter()
FILEIMGhandlein=Image.open(STRfilenamein).convert("RGBA")
INTLISTsize=FILEIMGhandlein.size
INTLISTsizetmp=min(INTLISTsize[0],INTLISTsize[1])
if INTLISTsize[0] != INTLISTsize[1]:
FILEIMGhandlein=FILEIMGhandlein.resize((INTLISTsizetmp,INTLISTsizetmp),Image.ANTIALIAS)
### 图片旋转90度
FILEIMGhandlein=FILEIMGhandlein.transpose(Image.ROTATE_90)
# FILEIMGhandlein=FILEIMGhandlein.transpose(Image.FLIP_LEFT_RIGHT)
# FILEIMGhandlein=FILEIMGhandlein.transpose(Image.FLIP_TOP_BOTTOM)
# FILEIMGhandlein=FILEIMGhandlein.transpose(Image.ROTATE_90)
# FILEIMGhandlein=FILEIMGhandlein.transpose(Image.ROTATE_180)
# FILEIMGhandlein=FILEIMGhandlein.transpose(Image.ROTATE_270)
FLOATcircler=float(INTLISTsizetmp/2) # 中点横坐标
FLOAT41=float(INTLISTsizetmp*(0.25/3)**0.5) # 约1/4
FLOAT42=float(INTLISTsizetmp/4*2) # 约2/4
FLOAT43=float(INTLISTsizetmp*(1-(0.25/3)**0.5)) # 约3/4
FILEIMGhandleout=Image.new('RGBA', (round(FLOATcircler*2),round(FLOATcircler*2)),(255,255,255,0))
IMGPIMhandlein=FILEIMGhandlein.load() # 像素的访问对象
IMGPIMhandleout=FILEIMGhandleout.load()
INToldpercent=0
INTscale=1
INTfornumber=INTLISTsizetmp**2
for i in range(INTLISTsizetmp):
for j in range(INTLISTsizetmp):
INTnewpercent=round(INTscale/INTfornumber*100)
if INTnewpercent>INToldpercent:
INToldpercent=INTnewpercent
INTcnttime=round(time.perf_counter()-INTbegintime)
os.system("clear")
print("正在处理坐标{:>4}*{:>4}的像素,耗时{:>3}秒,完成{:>2}%".format(i,j,INTcnttime,INTnewpercent))
if i<FLOAT41 and j<FLOAT42:
if j>(3*(FLOAT41-i)**2)**0.5:
IMGPIMhandleout[i,j] = IMGPIMhandlein[i,j]
elif i<FLOAT41 and j>FLOAT42:
if INTLISTsizetmp-j>(3*(FLOAT41-i)**2)**0.5:
IMGPIMhandleout[i,j] = IMGPIMhandlein[i,j]
elif i>FLOAT43 and j<FLOAT42:
if j>(3*(i-FLOAT43)**2)**0.5:
IMGPIMhandleout[i,j] = IMGPIMhandlein[i,j]
elif i>FLOAT43 and j>FLOAT42:
if INTLISTsizetmp-j>(3*(i-FLOAT43)**2)**0.5:
IMGPIMhandleout[i,j] = IMGPIMhandlein[i,j]
else:
IMGPIMhandleout[i,j] = IMGPIMhandlein[i,j]
INTscale+=1
FILEIMGhandleout.save(STRfilenameout)
STRfilenamein="inputimage.jpg"
STRfilenameout="hexagonout.png"
FUNChexagonimage(STRfilenamein,STRfilenameout)
Python 转换六边形图形(横)
最新推荐文章于 2024-01-31 14:45:31 发布