Advertisement
phjoe

Crop

Jan 28th, 2015
241
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # Image Crop
  2.  
  3. import appuifw as A
  4. import graphics as G
  5. import keyboard
  6. import powlite_fm
  7.  
  8. class Img:
  9.  def __init__(self):
  10.   self.run=0
  11.   self.cx,self.cy=W/2,H/2
  12.   self.lebar,self.tinggi=40,40
  13.   self.curx,self.cury=0,0
  14.   self.posx,self.posy=0,0
  15.   self.speed=3
  16.   self.save,self.crop=False,False
  17.   self.gb=None
  18.   self.path=u''
  19.   A.app.screen='full'
  20.   self.c = A.Canvas(redraw_callback=self.redraw,event_callback=kb.handle_event)
  21.   A.app.body=self.c
  22.   A.app.menu=[(u'Open Image',self.open)]
  23.   A.app.exit_key_handler = self.stop
  24.  
  25.  def stop(self):
  26.   self.run=0
  27.  
  28.  def redraw(self,x):
  29.   if img:self.c.blit(img)
  30.  
  31.  def open(self):
  32.   path=fm.AskUser(ext=['.jpg','.png'])
  33.   if not path:return
  34.   try:
  35.    del self.gb
  36.    self.path=path
  37.    self.gb=G.Image.open(path)
  38.   except:
  39.    self.gb=None
  40.   return self.gb
  41.  
  42.  def handle(self):
  43.   # kiri
  44.   if kb.is_down(0xe):
  45.    self.crop=False
  46.    self.curx-=self.speed
  47.    if self.curx<0:
  48.     self.curx=0
  49.     self.posx+=self.speed
  50.     if self.posx>0:self.posx=0
  51.  
  52.   # kanan
  53.   elif kb.is_down(0xf):
  54.    self.crop=False
  55.    self.curx+=self.speed
  56.    if self.gb.size[0]>=W:
  57.     if self.curx+self.lebar>W:
  58.      self.curx=W-self.lebar
  59.      self.posx-=self.speed
  60.      if self.posx<-(self.gb.size[0]-W):
  61.       self.posx=-(self.gb.size[0]-W)
  62.    else:
  63.     if self.curx+self.lebar>self.gb.size[0]:
  64.      self.curx=self.gb.size[0]-self.lebar
  65.      self.posx=0
  66.  
  67.   # atas
  68.   elif kb.is_down(0x10):
  69.    self.crop=False
  70.    self.cury-=self.speed
  71.    if self.cury<0:
  72.     self.cury=0
  73.     self.posy+=self.speed
  74.     if self.posy>0:self.posy=0
  75.  
  76.   # bawah
  77.   elif kb.is_down(0x11):
  78.    self.crop=False
  79.    self.cury+=self.speed
  80.    if self.gb.size[1]>=H:
  81.     if self.cury+self.tinggi>H:
  82.      self.cury=H-self.tinggi
  83.      self.posy-=self.speed
  84.      if self.posy<-(self.gb.size[1]-H):
  85.       self.posy=-(self.gb.size[1]-H)
  86.    else:
  87.     if self.cury+self.tinggi>self.gb.size[1]:
  88.      self.cury=self.gb.size[1]-self.tinggi
  89.      self.posy=0
  90.  
  91.   # lebar -
  92.   elif kb.is_down(0x34):
  93.    self.crop=False
  94.    self.lebar-=1
  95.    if self.lebar>10:
  96.     if self.posx<0:
  97.      self.posx+=1
  98.      if self.posx>0:self.posx=0
  99.      self.curx=W-self.lebar
  100.    if self.lebar<10:self.lebar=10
  101.  
  102.   # lebar +
  103.   elif kb.is_down(0x36):
  104.    self.crop=False
  105.    self.lebar+=1
  106.    if self.gb.size[0]>=W:
  107.     if self.lebar>W:
  108.      self.posx-=1
  109.      if self.posx<-(self.gb.size[0]-W):
  110.       self.posx=-(self.gb.size[0]-W)
  111.       self.lebar=self.gb.size[0]
  112.      self.curx=W-self.lebar
  113.    else:
  114.     if self.curx+self.lebar>self.gb.size[0]:
  115.      self.posx=0
  116.      self.lebar=self.gb.size[0]-self.curx
  117.  
  118.   # tinggi -
  119.   elif kb.is_down(0x32):
  120.    self.crop=False
  121.    self.tinggi-=1
  122.    if self.tinggi>10:
  123.     if self.posy<0:
  124.      self.posy+=1
  125.      if self.posy>0:
  126.       self.posy=0
  127.      self.cury=H-self.tinggi
  128.    if self.tinggi<10:self.tinggi=10
  129.  
  130.   # tinggi +
  131.   elif kb.is_down(0x38):
  132.    self.crop=False
  133.    self.tinggi+=1
  134.    if self.gb.size[1]>=H:
  135.     if self.tinggi>H:
  136.      self.posy-=1
  137.      if self.posy<-(self.gb.size[1]-H):
  138.       self.posy=-(self.gb.size[1]-H)
  139.       self.tinggi=self.gb.size[1]
  140.      self.cury=H-self.tinggi
  141.    else:
  142.     if self.cury+self.tinggi>self.gb.size[1]:
  143.      self.posy=0
  144.      self.tinggi=self.gb.size[1]-self.cury
  145.  
  146.   # 5 preview
  147.   elif kb.pressed(0x35):
  148.    self.crop=True
  149.  
  150.   # hash simpan
  151.   elif kb.pressed(0x7f):
  152.    self.save=True
  153.  
  154.  def running(self):
  155.   self.run=1
  156.   while self.run:
  157.    img.clear(0)
  158.    if self.gb:
  159.     img.blit(self.gb,target=(self.posx,self.posy))
  160.     if not self.crop:
  161.      # kursor
  162.      img.rectangle((self.curx,self.cury,self.curx+self.lebar,self.cury+self.tinggi),0xff0000)
  163.     else:
  164.      img.rectangle((4,4,4+self.lebar+2,4+self.tinggi+2),0x00ff00)
  165.      # preview
  166.      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))
  167.     if self.save:
  168.      new=G.Image.new((self.lebar,self.tinggi))
  169.      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))
  170.      new.save(self.path[:-4]+'_crop_%d_x_%d.jpg' %(self.lebar,self.tinggi))
  171.      self.save=False
  172.      A.note(u'Save OK')
  173.    else:
  174.     # no image
  175.     img.text((5,15),u'Select Image',0xffffff,'legend')
  176.    self.redraw(0)
  177.    A.e32.ao_sleep(1e-04)
  178.    if self.gb:self.handle()
  179.  
  180.  
  181.  
  182. fm=powlite_fm.manager()
  183. kb=keyboard.Keyboard()
  184. W,H=G.sysinfo.display_pixels()
  185. img=G.Image.new((W,H))
  186. Img().running()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement