crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> сохранение картинки(.jpg, .gif) в файл из потока
eldar85
  опции профиля:
сообщение 10.2.2010, 13:56
Сообщение #1


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


всем сдрасти) никак не могу справиться с такой проблемой, нужно картинку загрузить в формате .gif
делаю загрузку курлом в строку, потом записываю в файл, но файл получается какого то не правельного формата... что делать подскажите плиз...
вот код:

QString StringJPG;
StringJPG.toStdString() = curl->load(http://........gif)->exec();
QFile file("captcha.gif");
file.open(QIODevice::WriteOnly);
QDataStream out(&file);
out << StringJPG;
file.close();
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
2 страниц V   1 2 >  
Начать новую тему
Ответов (1 - 9)
Litkevich Yuriy
  опции профиля:
сообщение 10.2.2010, 14:11
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(eldar85 @ 10.2.2010, 16:56) *
StringJPG.toStdString() = curl->load(http://........gif)->exec();
а будет ли такая запись работать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
eldar85
  опции профиля:
сообщение 10.2.2010, 14:32
Сообщение #3


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


ну вместо точек там полный адресс картинки.
curl->load(http://........gif)->exec()
а если вы имеете ввиду курловские функции, они самописные и я ими уже давно пользуюсь, работают очень хорошо.
вот если вывести в консоль эту строку StringJPG.toStdString то будет видно следующее

"HTTP/1.1 200 OK
Server: nginx/0.7.61
Date: Wed, 10 Feb 2010 11:06:15 GMT
Content-Type: image/gif
Content-Length: 2141
Last-Modified: Thu, 24 Sep 2009 07:16:55 GMT
Connection: keep-alive
Accept-Ranges: bytes

GIF89"

причем на сайте картинка весит 2,2Кб , а у меня загруженный файл весит всего 4 байта. вообще что то нето...
можете написать хотябы как правельно картинку сохранять из QString потоком в файл???
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 10.2.2010, 15:52
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(eldar85 @ 10.2.2010, 17:32) *
ну вместо точек там полный адресс картинки.
curl->load(http://........gif)->exec()
а если вы имеете ввиду курловские функции,
нет я имел в виду
Цитата(eldar85 @ 10.2.2010, 16:56) *
StringJPG.toStdString() =
эта функция вернёт объект, а не ссылку на него. Т.е. далее вы не сможете воспользоваться StringJPG (он не будет содержать резальтата присваивания). Может я и ошибаюсь.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
eldar85
  опции профиля:
сообщение 10.2.2010, 20:45
Сообщение #5


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


так вот я и не знаю что и как тут сделать, посоветовали в QByteArray скопировать изображение, блин но тоже не знаю как и что написать... я в кьюти только научился окна создавать, а вот с файлами пока засада)
а мне сейчас прям срочно нужно сделать сохранение картинки в файл, а ума не хватает как это сделать...

да к стати вы не ошибаетесь, так он вообще ничего не содержит)
string Str = curl->load(http://........gif)->exec();
QString Str1 = Str.c_str();
только вот так выдается вот это:
"HTTP/1.1 200 OK
Server: nginx/0.7.61
Date: Wed, 10 Feb 2010 11:06:15 GMT
Content-Type: image/gif
Content-Length: 2141
Last-Modified: Thu, 24 Sep 2009 07:16:55 GMT
Connection: keep-alive
Accept-Ranges: bytes

GIF89"

блин но мне нужно нормально сохранить картинку в формате .jpg .gig
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 10.2.2010, 20:54
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


eldar85, я с Curl'ом не работал. Но судя по результату функции:
curl->load(http://........gif)->exec();
она не возвращает саму картинку. Тебе нужно найти функцию, в Curl'е, которая именно двоичные данные возвращает
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
eldar85
  опции профиля:
сообщение 11.2.2010, 7:54
Сообщение #7


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


да я тоже так думаю)) потому что загружает он чисто текст...
я до этого не сталкивался с загрузкой картинок, поэтому было не к чему, а теперь приспичило и разобраться не могу никак))) ладно буду копаться)) спасибо за помощь)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
eldar85
  опции профиля:
сообщение 21.2.2010, 21:05
Сообщение #8


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


все же курлом никак не могу закачать картинку в файл.
подскажите пожалуйста как закачать картинку средствами Qt имено в файл. везде приведены примеры сохранения текстовых файлов и .html но нигде не слова о картинке формата .jpg .gif и прочее. написал пару примеров, но на практике вышла полная лажа...
QFile file;
file.setFileName("image.gif");
if(!file.open(QIODevice::WriteOnly))
{
QMessageBox::warning(this, tr("HTTP GET"),
tr("Can't write file")
.arg(file.fileName())
.arg(file.errorString()));
return;
}

QHttp *http = new QHttp;


http->get("http://www.какой нить адресс.gif", &file);
file.close();


вот что пришло на ум)) подскажите плиз, что тут не так?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
eldar85
  опции профиля:
сообщение 21.2.2010, 21:51
Сообщение #9


программист
***

Группа: Участник
Сообщений: 283
Регистрация: 2.1.2010
Из: Москва
Пользователь №: 1348

Спасибо сказали: 0 раз(а)




Репутация:   0  


почему то такая запись вообще вызывает ошибку программы и винда ее сразу закрывает.
главное косяк где то в этой строке http->get("http://www.какой нить адресс.gif", &file);
если написать так http->get("http://www.какой нить адресс.gif"); то зависания не происходит.
Хотя я вообще не уверен что делаю тут хоть что то правельно...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 21.2.2010, 22:14
Сообщение #10


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(eldar85 @ 21.2.2010, 21:51) *
почему то такая запись вообще вызывает ошибку программы и винда ее сразу закрывает.

Метод QHttp::get запускает асинхронную загрузку данных, а ты следующей строкой закрываешь файл, в который он должен сохранять результат.
Примеры загрузки с использованием QHttp и QNetworkAccessManager. Загрузка принудительно делается синхронной, но это легко переделывается для работы с сигналами.

Раскрывающийся текст
void loader_http()
{
        QFile file( "save.gif" );
        if( !file.open( QIODevice::WriteOnly ) )
        {
                qDebug() << "Error create file";
                return;
        }

        QHttp http;
        QEventLoop loop;
        QObject::connect( &http, SIGNAL( done( bool ) ), &loop, SLOT( quit() ) );

        http.setHost( "www.prog.org.ru" );
        http.get( "/Themes/default/images/smflogo.gif", &file );
        loop.exec();

        qDebug() << http.state() << http.error() << http.bytesAvailable();
}

void loader_nam()
{
        QEventLoop loop;
        QNetworkAccessManager manager;
        QNetworkReply *reply = manager.get( QNetworkRequest( QUrl( "http://prog.org.ru/Themes/default/images/smflogo.gif" ) ) );
        QObject::connect( reply, SIGNAL( finished() ), &loop, SLOT( quit() ) );
        loop.exec();

        qDebug() << reply->error() << reply->bytesAvailable();
        QByteArray buf = reply->readAll();
        QFile file( "save.gif" );
        if( file.open( QIODevice::WriteOnly ) )
        {
                file.write( buf );
        }
}


Сообщение отредактировал BRE - 21.2.2010, 22:14
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 24.11.2024, 3:05