скручивать и изменить размер удаленного изображения
-
27-10-2019 - |
Вопрос
Я использую этот скрипт для загрузки и изменения размера удаленного изображения. В части изменения размера что -то идет не так. Что это?
<?php
$img[]='http://i.indiafm.com/stills/celebrities/sada/thumb1.jpg';
$img[]='http://i.indiafm.com/stills/celebrities/sada/thumb5.jpg';
foreach($img as $i){
save_image($i);
if(getimagesize(basename($i))){
echo '<h3 style="color: green;">Image ' . basename($i) . ' Downloaded OK</h3>';
}else{
echo '<h3 style="color: red;">Image ' . basename($i) . ' Download Failed</h3>';
}
}
function save_image($img,$fullpath='basename'){
if($fullpath=='basename'){
$fullpath = basename($img);
}
$ch = curl_init ($img);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
$rawdata=curl_exec($ch);
curl_close ($ch);
// now you make an image out of it
$im = imagecreatefromstring($rawdata);
$x=300;
$y=250;
// then you create a second image, with the desired size
// $x and $y are the desired dimensions
$im2 = imagecreatetruecolor($x,$y);
imagecopyresized($im2,$im,0,0,0,0,$x,$y,imagesx($im),imagesy($im));
imagecopyresampled($im2,$im,0,0,0,0,$x,$y,imagesx($im),imagesy($im));
// delete the original image to save resources
imagedestroy($im);
if(file_exists($fullpath)){
unlink($fullpath);
}
$fp = fopen($fullpath,'x');
fwrite($fp, $im2);
fclose($fp);
// remember to free resources
imagedestroy($im2);
}
?>
Решение
Когда я запускаю его, PHP дает мне следующую ошибку:
Предупреждение: fwrite () ожидает, что параметр 2 будет строкой, ресурс дан ... в строке 53
fwrite()
записывает строку в файл. Вы хотите использовать функцию GD imagejpeg()
Чтобы сохранить ресурс GD в файл. Это работает для меня, когда я меняю
$fp = fopen($fullpath,'x');
fwrite($fp, $im2);
fclose($fp);
к
imagejpeg($im2, $fullpath);
На несвязанном примечании, если все, что вы делаете с Curl, это захватывает файлы, вы можете просто использовать file_get_contents()
Вместо Curl, предполагая, что PHP настроен, чтобы разрешить полные URL -адреса в функциях FOPEN. (Я считаю, что это по умолчанию.) См. Раздел «Примечания» о Страница ручной работы file_get_contents () для получения дополнительной информации. Функция является Двоирный безопасность, поэтому он работает с изображениями в дополнение к текстовым файлам. Чтобы использовать его, я только что заменил все шесть строк функций Curl на эту линию:
$rawdata = file_get_contents($img);
Обновлять:
В ответ на ваш вопрос ниже вы можете указать новое имя файла для них в клавишах массива, как SO:
<?php
$img['img1.jpg']='http://i.indiafm.com/stills/celebrities/sada/thumb1.jpg';
$img['img2.jpg']='http://i.indiafm.com/stills/celebrities/sada/thumb5.jpg';
foreach($img as $newname => $i){
save_image($i, $newname);
if(getimagesize(basename($newname))){