Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Image Crop
- import appuifw as A
- import graphics as G
- import keyboard
- import powlite_fm
- class Img:
- def __init__(self):
- self.run=0
- self.cx,self.cy=W/2,H/2
- self.lebar,self.tinggi=40,40
- self.curx,self.cury=0,0
- self.posx,self.posy=0,0
- self.speed=3
- self.save,self.crop=False,False
- self.gb=None
- self.path=u''
- A.app.screen='full'
- self.c = A.Canvas(redraw_callback=self.redraw,event_callback=kb.handle_event)
- A.app.body=self.c
- A.app.menu=[(u'Open Image',self.open)]
- A.app.exit_key_handler = self.stop
- def stop(self):
- self.run=0
- def redraw(self,x):
- if img:self.c.blit(img)
- def open(self):
- path=fm.AskUser(ext=['.jpg','.png'])
- if not path:return
- try:
- del self.gb
- self.path=path
- self.gb=G.Image.open(path)
- except:
- self.gb=None
- return self.gb
- def handle(self):
- # kiri
- if kb.is_down(0xe):
- self.crop=False
- self.curx-=self.speed
- if self.curx<0:
- self.curx=0
- self.posx+=self.speed
- if self.posx>0:self.posx=0
- # kanan
- elif kb.is_down(0xf):
- self.crop=False
- self.curx+=self.speed
- if self.gb.size[0]>=W:
- if self.curx+self.lebar>W:
- self.curx=W-self.lebar
- self.posx-=self.speed
- if self.posx<-(self.gb.size[0]-W):
- self.posx=-(self.gb.size[0]-W)
- else:
- if self.curx+self.lebar>self.gb.size[0]:
- self.curx=self.gb.size[0]-self.lebar
- self.posx=0
- # atas
- elif kb.is_down(0x10):
- self.crop=False
- self.cury-=self.speed
- if self.cury<0:
- self.cury=0
- self.posy+=self.speed
- if self.posy>0:self.posy=0
- # bawah
- elif kb.is_down(0x11):
- self.crop=False
- self.cury+=self.speed
- if self.gb.size[1]>=H:
- if self.cury+self.tinggi>H:
- self.cury=H-self.tinggi
- self.posy-=self.speed
- if self.posy<-(self.gb.size[1]-H):
- self.posy=-(self.gb.size[1]-H)
- else:
- if self.cury+self.tinggi>self.gb.size[1]:
- self.cury=self.gb.size[1]-self.tinggi
- self.posy=0
- # lebar -
- elif kb.is_down(0x34):
- self.crop=False
- self.lebar-=1
- if self.lebar>10:
- if self.posx<0:
- self.posx+=1
- if self.posx>0:self.posx=0
- self.curx=W-self.lebar
- if self.lebar<10:self.lebar=10
- # lebar +
- elif kb.is_down(0x36):
- self.crop=False
- self.lebar+=1
- if self.gb.size[0]>=W:
- if self.lebar>W:
- self.posx-=1
- if self.posx<-(self.gb.size[0]-W):
- self.posx=-(self.gb.size[0]-W)
- self.lebar=self.gb.size[0]
- self.curx=W-self.lebar
- else:
- if self.curx+self.lebar>self.gb.size[0]:
- self.posx=0
- self.lebar=self.gb.size[0]-self.curx
- # tinggi -
- elif kb.is_down(0x32):
- self.crop=False
- self.tinggi-=1
- if self.tinggi>10:
- if self.posy<0:
- self.posy+=1
- if self.posy>0:
- self.posy=0
- self.cury=H-self.tinggi
- if self.tinggi<10:self.tinggi=10
- # tinggi +
- elif kb.is_down(0x38):
- self.crop=False
- self.tinggi+=1
- if self.gb.size[1]>=H:
- if self.tinggi>H:
- self.posy-=1
- if self.posy<-(self.gb.size[1]-H):
- self.posy=-(self.gb.size[1]-H)
- self.tinggi=self.gb.size[1]
- self.cury=H-self.tinggi
- else:
- if self.cury+self.tinggi>self.gb.size[1]:
- self.posy=0
- self.tinggi=self.gb.size[1]-self.cury
- # 5 preview
- elif kb.pressed(0x35):
- self.crop=True
- # hash simpan
- elif kb.pressed(0x7f):
- self.save=True
- def running(self):
- self.run=1
- while self.run:
- img.clear(0)
- if self.gb:
- img.blit(self.gb,target=(self.posx,self.posy))
- if not self.crop:
- # kursor
- img.rectangle((self.curx,self.cury,self.curx+self.lebar,self.cury+self.tinggi),0xff0000)
- else:
- img.rectangle((4,4,4+self.lebar+2,4+self.tinggi+2),0x00ff00)
- # preview
- img.blit(self.gb,target=(5,5),source=(self.curx-self.posx,self.cury-self.posy,self.curx-self.posx+self.lebar,self.cury-self.posy+self.tinggi))
- if self.save:
- new=G.Image.new((self.lebar,self.tinggi))
- new.blit(self.gb,target=(0,0),source=(self.curx-self.posx,self.cury-self.posy,self.curx-self.posx+self.lebar,self.cury-self.posy+self.tinggi))
- new.save(self.path[:-4]+'_crop_%d_x_%d.jpg' %(self.lebar,self.tinggi))
- self.save=False
- A.note(u'Save OK')
- else:
- # no image
- img.text((5,15),u'Select Image',0xffffff,'legend')
- self.redraw(0)
- A.e32.ao_sleep(1e-04)
- if self.gb:self.handle()
- fm=powlite_fm.manager()
- kb=keyboard.Keyboard()
- W,H=G.sysinfo.display_pixels()
- img=G.Image.new((W,H))
- Img().running()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement