Закачка jpg файла

Mashino

Новичок
Закачка jpg файла

Столкнулся с такой проблемой. При скачивании jpg файла с другого сервера не получается его корректно сохранить. Файл закачанный файл получается размытый - набор цветов. Если выводить полученные данные в браузер, то картинка нормально отображается. В чем проблема?

Вот код

$src - url-адрес картинки (http://сайт/картинка.jpg)
$dest - путь к новому файлу на исходном сервере (tmp/435.jpg)

$data = file_get_contents($src);
$srcImage = imagecreatefromstring($data);
ob_start();
imagejpeg($srcImage);
$contents = ob_get_contents();
ob_end_clean();

// выводим картинку в браузер (отлично выводится)
echo "<img src='data:image/png;base64,".base64_encode($contents)."' />";

// сохраняем картинку в файл
$fs = fopen ($dest, "wb9");
if (is_resource($fs)) {
fwrite($fs, $contents);
}
fclose($fs);

imagedestroy($srcImage);

Помогите, пожалуйста, разобраться в чем проблема, уже три дня с этим пытаюсь разобраться, не выходит(
 

Фанат

oncle terrible
Команда форума
Послушай дружочек.
А кто тебе посоветовал такой замечательный способ сохранения картинок в файл?
 

Mashino

Новичок
А как по-другому? Я шел по методу сохранения обычных файлов..(

-~{}~ 14.01.10 14:55:

можно еще и так imagejpeg($srcImage, $dest); // но все равно не помогает
 

Adelf

Administrator
Команда форума
А если бы это... допустим был pdf-файл?
Ты бы искал либу для работы с pdf только для того, чтобы скопировать файл на свой сервер?
 

Фанат

oncle terrible
Команда форума
это ладно. вот если бы это был мп3, или, скажем, сайндфордж какой-нибудь :)

Mashino
то есть, обычно ты именно так файлы и сохраняешь - через ob_start?
 

Mashino

Новичок
Банальная функция copy() копирует jpg файл, но она копирует не правильно, и, соответственно, файл получается не того формата и даже не открывается никак.
Я прошу помочь навести меня в нужное русло.

-~{}~ 14.01.10 15:08:

нет, обычно я сохраняю файлы так:

$context = stream_context_create();
$fp = fopen ($src, "rb", false, $context);
if (is_resource($fs)) {
$fs = fopen ($dest, "wb9", false, $context);
if (is_resource($fs)) {
while(!feof($fp)) {
$data = fread($fp, 1024);
fwrite($fs, $data);
}
fclose($fs);
}
fclose($fp);
}

-~{}~ 14.01.10 15:10:

но это не суть, я не качаю мп3 файлы с других сайтов и не качаю софт. Мне нужно скачивать и сохранять картинки, которые максимум могут весить 200-300 кб.
 

Фанат

oncle terrible
Команда форума
вообще, судя по симптомам, проблема не в этом анекдотическом методе.
но судя по его наличию, можно предположить наличие и других, не менее анекдотических косяков.

в общем, аффтар, поскольку знаний у тебя нету, то сиди еще три дня и три ночи. авось, озарит как-нибудь

-~{}~ 14.01.10 13:13:

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

Mashino

Новичок
понятно, а вы своими знаниями поделиться не хотите никак, лишь бы постебать других.

-~{}~ 14.01.10 15:19:

Энди Гутманс пишет об этом способе и это не весь код. Но, видимо, зря ждал помощи на этом форуме. Но все равно спасибо вам ребята за совет.
 

Adelf

Administrator
Команда форума
$data = fread($fp, 1024);
fwrite($fs, $contents);

Вообще - странная конструкция :) Читаем в одну переменную, а пишем из другой.

>> файл получается не того формата и даже не открывается никак.
Нормально все скопироваться должно. Проще надо быть. И искать ошибку в нормальном коде, а не экзотические пути решения.
 

Mashino

Новичок
я опечатался, на самом деле вместо $contents должна стоять переменная $data. Файл то скачивается, но его невозможно открыть/просмотреть.
 

Adelf

Administrator
Команда форума
Скачай сам(браузером). сравни с тем что скачал php - пойми почему они разные оказались. и т.д. РАБОТАЙ, а не ной.
 

Mashino

Новичок
уахахахах))) дело то было не в способе скачивания)))
как и скачивал изначально картинку методом:

$data = file_get_contents($src);
$srcImage = imagecreatefromstring($data);
imagejpeg($srcImage, $dest);
imagedestroy($srcImage);

так нормально скачивает, просто я в фтп-менеджере в настройках забыл включить автоопределение передаваемых данных. И у меня скачивался файл в режиме ASCII, пилин)) допетрил до этого после открытия файла по ссылке со своего сервера)
Спасибо, Adelf!
 

dimagolov

Новичок
Mashino, тебе нужно скачать картинку или скачать и сохранить ее как jpeg?
 

Adelf

Administrator
Команда форума
$data = file_get_contents($src);
$srcImage = imagecreatefromstring($data);
ob_start();
imagejpeg($srcImage);
$contents = ob_get_contents();
ob_end_clean();

Вот этот большой код заменяется вот этим
$contents = file_get_contents($src);

При этом разницы почти не будет. Почти - потому что ты заново сохраняешь жпег, возможно ты даже теряешь в качестве при этом.
 

С.

Продвинутый новичок
Банальная функция copy() копирует jpg файл, но она копирует не правильно, и, соответственно, файл получается не того формата и даже не открывается никак.
Я прошу помочь навести меня в нужное русло.
Ты не разобрался, почему у тебя банальная функция не работает и переходишь к другому небанальному методу. Программисты вообще-то разбираются, в чем проблема и если от нее нельзя избавиться, то осознанно используют другой метод, а не тыкаются, куда ни попадя, как слепые котята.
 
Сверху