2016-01-21 3 views
1

EDIT: пожалуйста, забудьте об этом вопросе! Я сделал глупую ошибку в исходном коде. Пример кода работает так, как ожидалось!Поворот и обрезка изображения партия

Я пытаюсь повернуть и обрезать изображения. меня это до сих пор:

$w = 100; 
$h = 400; 
$img1 = imagecreatefromjpeg('image1.jpg'); 
$img2 = imagecreatefromjpeg('image2.jpg'); 
for ($i = 0; $i < 2; $i++) { 
    ${'img'.$i + 3} = imagecreatetruecolor($h, $h); 
    imagecopy(${'img'.$i + 3}, ${'img'.$i + 1}, 0, 0, 0, 0, $w, $h); 
    ${'img'.$i + 3} = imagerotate(${'img'.$i + 3}, 90, 0); 
    ${'img'.$i + 3} = imagecrop(${'img'.$i + 3}, array(0, 0, $h, $w)); 
    imagejpeg(${'img'.$i + 3}); 
    imagedestroy(${'img'.$i + 3}); 
    imagedestroy(${'img'.$i + 1}); 
} 

Так что я по существу сделать, это открыть некоторые JPGs, создавать новые образы, копируют JPGs новые образы, а затем обрезать изображения.

Увы, это приводит к пустой картинки ...

Что я делаю неправильно?

+0

и вы получаете ошибки в журнале? – RamRaider

+0

no, nothing ... – Dick

ответ

0

Не знаю, будет ли это иметь значение для отсутствия выхода - но что делать $img1 & $img2 do - они не привыкли, насколько я могу видеть?

@error_reporting(E_ALL); 
$w = 100; 
$h = 400; 

$img1 = imagecreatefromjpeg('image1.jpg'); 
$img2 = imagecreatefromjpeg('image2.jpg'); 

for ($i = 0; $i < 3; $i++) { 

     $new=${'img'.$i + 3}; 
     $src=${'img'.$i + 1}; 


    $new = imagecreatetruecolor($h, $h); 
    imagecopy($new, $src, 0, 0, 0, 0, $w, $h); 

    $new = imagerotate($new, 90, 0); 
    $new = imagecrop($new, array(0, 0, $h, $w)); 

    imagejpeg($new); 

    imagedestroy($new); 
    imagedestroy($src); 

    break;/* just to see if it gets this far*/ 
} 
+0

Спасибо, но это была ошибка, которую я сделал в исходном коде, который я написал ... BTW: как комментарий к вашему вопросу о '$ img1' и' $ img2', они были указаны в строка '$ src = $ {'img'. $ i + 1};'. – Dick

0

Во-первых, вы должны рассмотреть возможность использования image copy resampled для лучшего качества результата от процесса.

Затем вам необходимо правильно использовать функцию imagejpeg, в настоящее время вы просто загружаете JPG и вывозите их напрямую, что может быть тем, что вы хотите, но вы находитесь в цикле, и вы не можете напрямую загружать сразу несколько изображений в тот же файл. Это также означает, что изображение, которое вы видите (или нет), является окончательным изображением в наборе.

Ваша проблема заключается в том, что цикл for выполняется три раза, но у вас есть только данные, связанные с первыми двумя экземплярами, но третий экземпляр пуст, и поскольку он является самым последним, это единственный экземпляр, выводимый в браузер.

Итак:

1) Сохранение изображений вы сгенерированные с imagejpeg($data,$filename);. Вы можете определить имя файла как $filename = $img+3.".jpg"; или подобное.

2) Было бы намного проще отлаживать и читать ваш код, если бы вы использовали массивы вместо числовых переменных, это очень грязный способ написания кода!

3) Если вы хотите выводить изображение непосредственно в браузере нужно PHP, чтобы поставить заголовок, такие как header('Content-Type: image/jpeg');перед тем вывода содержимого imagejpeg.


Перепев вашего код:

$w = 100; 
$h = 400; 
$img[1] = imagecreatefromjpeg('image1.jpg'); 
$img[2] = imagecreatefromjpeg('image2.jpg'); 
for ($i = 3; $i < 5; $i++) { 
    $img[$i] = imagecreatetruecolor($h, $h); 
    $j = $i -2; 
    imagecopyresampled($img[$i], $img[$j], 0, 0, 0, 0, $h, $h, $w, $h,); 
    // this function also contains destination width and destination 
    // height, which are equal to the size of the destination image so 
    // are set as $h, $h in the function above. 
    $img[$i] = imagerotate($img[$i], 90, 0); 
    $img[$i] = imagecrop($img[$i], array(0, 0, $h, $w)); 
    $filename = "image-".$i.".jpg"; 
    imagejpeg($img[$i], $filename); 
    imagedestroy($img[$i]); 
    imagedestroy($img[$j]); 
} 
+0

Мне очень стыдно, я сделал ошибку в исходном коде :(Код, который я вставил здесь, был упрощен для примера. Поэтому, когда я пытался, чтобы это сработало. В любом случае, спасибо за подсказку с использованием массива, , – Dick

Смежные вопросы