code: def upload(apikey, picture, resize=None, rotation='00', noexif=False,
             callback=None):
      
  
      if isinstance(picture, str):
          with open(picture, 'rb') as file_obj:
              picture_name = picture
              data = file_obj.read()
      elif isinstance(picture, (tuple, list)):
          picture_name = picture[0]
          data = picture[1]
      else:
          raise TypeError("The second argument must be str or list/tuple. "
                          "Please refer to the documentation for details.")
  
  
      check_rotation(rotation)
      check_resize(resize)
      check_callback(callback)
  
      post_data = compose_post(apikey, resize, rotation, noexif)
  
      post_data['Datei[]'] = (punify_filename(basename(picture_name)), data)
  
      return do_upload(post_data, callback)
docs: prepares post for regular upload
  
      :param str apikey: Apikey needed for Autentication on picflash.
      :param str/tuple/list picture: Path to picture as str or picture data. \
          If data a tuple or list with the file name as str \
          and data as byte object in that order.
      :param str resize: Aresolution in the folowing format: \
          '80x80'(optional)
      :param str|degree rotation: The picture will be rotated by this Value. \
          Allowed values are 00, 90, 180, 270.(optional)
      :param boolean noexif: set to True when exif data should be purged.\
          (optional)
      :param function callback: function witch will be called after every read. \
          Need to take one argument. you can use the len function to determine \
          the body length and call bytes_read().