ФорумПрограммированиеPython → Передача изображения по BT

Передача изображения по BT

  • Mr.Pihto

    Сообщения: 1386 Репутация: N Группа: Адекваты

    Spritz 30 сентября 2010 г. 4:22

    на компе сервер делает скрин и отсылает его клиенту на телефоне… только вот клиент его открыть не моежет…
    сервер

    import socket, win32api, win32con, bluetooth, time, StringIO
    from PIL import ImageGrab, Image
    srv = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
    srv.bind(("",11))
    srv.listen(3)
    sock, addr = srv.accept()
    output = StringIO.StringIO()
    im = ImageGrab.grab().quantize(colors=2, method=0)
    im.save(output, "PNG")
    content = output.getvalue()
    sock.send(content)
    sock.close()


    клиент

    import appuifw, e32, socket, StringIO
    from graphics import Image
    sock = socket.socket(socket.AF_BT,socket.SOCK_STREAM)
    sock.connect(("00:1f:81:00:00:01", 11))
    buf = sock.recv(1024)
    im = Image.new((240, 320))
    im.clear(0xFFFFFF)
    im = Image.open(StringIO.StringIO(buf))
    im.save('E:\image.jpg')
    sock.close()


    ошибка вылетает на строке im = Image.open(StringIO.StringIO(buf))
    чето там SymbianError: [Errno -28] KErrBadName
    как вообще это правильно сделать? как принимать полную картинку независимо от её размера?
  • ivanscm

    Сообщения: 1251 Репутация: N Группа: Джедаи

    Spritz 30 сентября 2010 г. 6:52, спустя 2 часа 29 минут 57 секунд

    посылать отдельно размер :))
    С возвращением, Пiха!
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 30 сентября 2010 г. 8:40, спустя 1 час 48 минут 39 секунд

    Image.open() принимает название файла?
    adw/0
  • Mr.Pihto

    Сообщения: 1386 Репутация: N Группа: Адекваты

    Spritz 30 сентября 2010 г. 11:58, спустя 3 часа 17 минут 43 секунды

    adw0rd, да… я просто незнаю как реализовать все это.. прошу помощи..
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 30 сентября 2010 г. 13:11, спустя 1 час 13 минут 26 секунд

    А ты кму название файла передаешь? Посмотри как еще можно передавать
    adw/0
  • Mr.Pihto

    Сообщения: 1386 Репутация: N Группа: Адекваты

    Spritz 30 сентября 2010 г. 15:44, спустя 2 часа 32 минуты 31 секунду

    где посмотреть.. у графикс.имейдж есть только 3 функции new, open и ещё какаято шляпа.. функции принимающей объект я не нашёл
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 30 сентября 2010 г. 16:31, спустя 46 минут 44 секунды

    где посмотреть

    ну хотябы через dir() или через help()


    import Image
    dir(Image)
    help(Image)
    adw/0
  • Mr.Pihto

    Сообщения: 1386 Репутация: N Группа: Адекваты

    Spritz 1 октября 2010 г. 2:34, спустя 10 часов 3 минуты 38 секунд

    чето я не вижу там функции принимающей файловый объект..
  • Mr.Pihto

    Сообщения: 1386 Репутация: N Группа: Адекваты

    Spritz 1 октября 2010 г. 6:56, спустя 4 часа 21 минуту 59 секунд

    сделал так:
    сервер
    import socket, threading, win32api, win32con, bluetooth, time
    from PIL import ImageGrab, Image
    srv = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
    srv.bind(("",11))
    srv.listen(3)
    sock, addr = srv.accept()
    im = ImageGrab.grab().quantize(colors=2, method=1)
    im.save('C:\\temp.png', 'PNG')
    f = open('C:\\temp.png', 'rb')
    while 1:
       blk=f.read(1024)
       if not blk:
           break
       sock.send(blk)
       time.sleep(0.2)
    f.close()
    print 'file transfer done';
    sock.close()


    клиент
    import appuifw, e32, socket, StringIO
    from graphics import Image
    sock = socket.socket(socket.AF_BT,socket.SOCK_STREAM)
    sock.connect(("00:1f:81:00:00:01", 11))
    f=open('E:\\temp.png','wb')
    while 1:
       data=sock.recv(1024)
       if not data:
           break
       f.write(data)
    f.close()
    print 'file received'
    sock.close()


    все работает вот только в клиенте после команды sock.recv(1024) вылетает ошибка и программа так и не доходит до print 'file received'
    ошибка длинная… в конце написано
    data=self._sock.recv(n, f, cb)
    error:(32, 'Broken pipe')
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 1 октября 2010 г. 10:04, спустя 3 часа 7 минут 31 секунду


    чето я не вижу там функции принимающей файловый объект..
    я не знаю что за graphics.Image ты используешь, а PIL не подходит?
    Спустя 126 сек.
    Если вместо


    while 1:
    data=sock.recv(1024)
    if not data:
    break
    f.write(data)
    f.close()


    сделать


    data=sock.recv(1024)
    if not data:
    break
    f.write(data)
    f.close()


    то вылетает ошибка? Если нет, то передавай вместо 1024 - корретное число
    Спустя 26 сек.
    зы. с сокетами в питоне не приходилось работать, подсказываю чисто логически
    adw/0
  • Mr.Pihto

    Сообщения: 1386 Репутация: N Группа: Адекваты

    Spritz 1 октября 2010 г. 16:48, спустя 6 часов 44 минуты 27 секунд



    чето я не вижу там функции принимающей файловый объект..
    я не знаю что за graphics.Image ты используешь, а PIL не подходит?

    в pys60 нет библиотеки PIL
  • Mr.Pihto

    Сообщения: 1386 Репутация: N Группа: Адекваты

    Spritz 1 октября 2010 г. 16:57, спустя 8 минут 17 секунд



    while 1:
    data=sock.recv(1024)
    if not data:
    break
    f.write(data)
    f.close()


    сделать


    data=sock.recv(1024)
    if not data:
    break
    f.write(data)
    f.close()


    то вылетает ошибка? Если нет, то передавай вместо 1024 - корретное число
    Спустя 26 сек.
    зы. с сокетами в питоне не приходилось работать, подсказываю чисто логически

    да, так ошибка не вылетает… корректное число это как?
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 1 октября 2010 г. 17:03, спустя 6 минут 57 секунд

    например всего у тебя 100 байт, а ты требуешь 1024 байт
    надо просить 100 байт, для этого надо знать сколько у тебя байт весит файл
    adw/0
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 2 октября 2010 г. 2:12, спустя 9 часов 8 минут 40 секунд


    например всего у тебя 100 байт, а ты требуешь 1024 байт
    надо просить 100 байт, для этого надо знать сколько у тебя байт весит файл
    сокеты не так работают мих, 1024 в данном случае - МАКСИМАЛЬНОЕ количество байт. а сколько придет - столько придет. хотя может в питоне по другому реализована логика сокетных приложений, но не думаю что они чтото новое придумали :D ибо смысла не имеет изобретательство в данном случае)
    Сапожник без сапог
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 2 октября 2010 г. 3:01, спустя 48 минут 28 секунд

    Скорее всего ты прав, но проверять не буду :)
    adw/0

Пожалуйста, авторизуйтесь, чтобы написать комментарий!