Обрезка изображения в JES (Python)

Итак, я действительно новичок в этом Python, я использую JES и пытаюсь понять, как обрезать изображение. Я продолжаю получать сообщение об ошибке, что «show (croppedPicture)» недействителен, и я мог бы использовать любую помощь, которую я могу получить на этом этапе. Это мой код до сих пор:

def main():
print "Select the Media Folder"
  setMediaFolder()
  print "Select the picture (.jpg) file to crop"
  fileName = pickAFile()
  pict = makePicture(fileName)
  show(pict)

  startX = requestIntegerInRange("Enter X coordinate of upper, left-hand corner",0,getWidth(pict)-1)
  startY = requestIntegerInRange("Enter Y coordinate of upper, left-hand corner",0,getHeight(pict)-1)

  endX = requestIntegerInRange("Enter X coordinate of lower, right-hand corner",startX,getWidth(pict)-1)
  endY = requestIntegerInRange("Enter Y coordinate of lower, right-hand corner",startY,getHeight(pict)-1)      



  print "Please wait while picture is cropped from (",startX,",",startY,") to (",endX,",",endY,")."
  croppedPicture = makeCroppedPicture(pict, startX, startY, endX, endY)
  show(croppedPicture)

  newFileName = getMediaPath('croppedPicture.jpg')
  writePictureTo(croppedPicture, newFileName)

def makeCroppedPicture(pict, startX, startY, endX, endY):
  """ Makes and returns a cropped rectangular region of a picture into a new picture """

  target = makeEmptyPicture

def crop(picture):
  def crop(picture):
  width = getWidth(pict)
  height = getHeight(pict)
  canvas = makeEmptyPicture(width, height)
  targetX = 100
  for sourceX in range(100,30):
    targetY = 100
    for sourceY in range(311,433):
      color = getColor(getPixel(pict, sourceX, sourceY))
      setColor(getPixel(canvas, targetX, targetY),color)
      targetY = targetY + 1
    targetX = targetX + 1
  show(pict)
  return canvas  

  return target   # returns the cropped picture

main() # starts the program

person Kinsey Doerr    schedule 08.03.2015    source источник


Ответы (1)


Кажется, что-то пошло не так со вставкой вашего кода; в строке 2 отсутствует отступ, а в строке 3 есть ложная строка «Добавить код сюда» (что-то странное также пошло не так с определением (-ями) функции урожая (), поскольку отступ необходимо исправить, прежде чем код будет запущен !).

Тем не менее, удаляя функции урожая (), удаляя строки 29-43, поскольку они в настоящее время не используются, тогда проблема становится легче увидеть...

   def makeCroppedPicture(pict, startX, startY, endX, endY):
       target = makeEmptyPicture
       return target   # returns the cropped picture

Что происходит со строкой target = makeEmptyPicture, так это то, что вы назначаете переменную target фактической функции makeEmptyPicture, а не тому, что возвращается при вызове этой функции.

Для интереса, в сообщении подробнее о том, как/почему вы действительно хотите это сделать. Назначение функции переменной.

Чтобы исправить это, просто добавьте два параметра для высоты и ширины обрезанного изображения к вашему вызову makeEmptyPicture. Н.Б. вы можете просто жестко закодировать пару чисел, чтобы сначала проверить, работает ли он. т.е. target = makeEmptyPicture(50, 50)

person Jeremy Gosling    schedule 13.03.2015