2014-02-02 4 views
0

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

Function rotate($angle) { 
    $original = imagecreatefrompng("img/Arrow.png"); 
    $compass = imagerotate($original, $angle, 0); 
    return $compass; 
} 

Это будет отображаться с использованием некоторого html, который я эхо. Переменный угол передается из базы данных. HTML на PHP скрипт выглядит следующим образом:

<img src='".rotate($row['wind_dir'])."'/> 

изображение не отображается, и ясно, что браузер не знает, где он.

Когда я просматривать HTML в браузере, выше строка показывает, как

<img src="Resource id #4"/> 

и когда я нажимаю на него, он переходит к 404.

Что я делаю неправильно? Я забыли строку в функции поворота изображения?

EDIT: Попробовав некоторые из ответов ниже, я получаю изображение, но оно отображается только как черный ящик!

EDIT2:

Ну после того, как много пустячный, оказывается, все, что было необходимо для третьего значения imagerotate() до -1 следующим образом:

$original = imagecreatefrompng("img/goog.png"); 
$compass = imagerotate($original, $angle, -1); 
imagealphablending($compass, true); 
imagesavealpha($compass, true); 
header('Content-Type: image/png'); 
imagepng($compass); 
imagedestroy($compass); 
+0

Я не могу представить, чтобы этот код был слишком эффективным. Вы создаете изображение каждый раз, когда страница загружается. Вы считали, что вместо этого используете CSS или JS? –

+0

Даже если вы исправили это, вы должны прислушаться к словам, сказанным другими. Это ужасно неэффективно. – webnoob

ответ

0

Вы должны выполнить функцию и отправить заголовок: попробуйте, как показано ниже, скажем, наше имя PHP файл rotate.php:

rotate.php

function rotate($angle) { 
    $original = imagecreatefrompng("test.png"); 
    $compass = imagerotate($original, $angle, 0); 
    header('Content-Type: image/png'); 
    imagepng($compass); 
    imagedestroy($compass); 
} 

if(isset($_GET['angle'])){ 
rotate($_GET['angle']); 
} 

ТОГДА в вашем HTML можно вызвать веб-ресурса я.e вы php файл как:

<img src="url_to_rotate.php?angle=90" /> 

Также не забудьте очистить вход GET перед его выполнением.

+0

Пробовал это тоже, изображение по-прежнему остается черным ящиком! – sh3rifme

+0

Попробуйте это изображение и сообщите мне свой ответ https://www.google.co.in/images/srpr/logo11w.png –

+0

он успешно поворачивает изображение, но оставляет черный фон по сторонам изображения в квадрате , как если бы он был повернут на черном холсте. – sh3rifme

2

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

Компас всегда будет Arrow.png в одном из 360 позиций.

Используйте пакетный процесс в Photoshop или PHP для создания 360 версий. Один для каждой степени. Затем вы можете просто вызвать Arrow_120.png, например, на 120 градусов. Вы удаляете проблему с существующим кодом создания изображений на лету, избегая при этом проблем совместимости с CSS/JS.

+0

Хотя я бы, вероятно, использовал это, это для университетского задания, и небольшая часть наших оценок исходит из обработки изображений php, среди прочего – sh3rifme

0

Отображаемое изображение должно быть файлом изображения. Для этого вы должны использовать imagejpeg();

Так в основном вы должны иметь 2 PHP файлы:

1: Создает файл изображения, используя код и imagejpeg();

<?php 

$original = imagecreatefrompng("img/Arrow.png"); 
$compass = imagerotate($original, $_GET['angle'], 0); 
header('Content-Type: image/jpeg'); 
imagejpeg($compass); 
?> 

2: Файл php, отображающий изображение.

<img src='image.php?angle=".$row['wind_dir']."'/> 

если вы хотите только один файл, который вы могли бы сделать следующее:

<?php 

$original = imagecreatefrompng("img/Arrow.png"); 
$compass = imagerotate($original, $_GET['angle'], 0); 

ob_start(); 
imagepng($compass); 
$stringdata = ob_get_contents(); 
ob_end_clean(); 

$imageData = base64_encode($stringdata); 
$src = 'data: image/png;base64,'.$imageData; 
echo '<img src="',$src,'">'; 
?> 
+0

Изображение просто показывается как черный ящик! его улучшение по сравнению с чем-либо, показывая, что я думаю ... – sh3rifme

+0

Это, вероятно, связано с прозрачностью. Смотрите: http://stackoverflow.com/questions/6602263/black-background-when-rotating-image-with-php – Martin149

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