Witam,
Mam taki skrypt:
[code]
[/code]
chciałbym zapisywać do pliku obrócony obrazek, wiecie może jak to zrobić??
Northwest
Witam,
Mam taki skrypt:
[code]
[/code]
chciałbym zapisywać do pliku obrócony obrazek, wiecie może jak to zrobić??
Northwest
działa, dzięki :)
ale coś jest nie tak, jak obrócę obrazek o np. 23 stopnie, to wokół obrazka mam czarne pole:
http://www.eksiegarnia.net/autka/zielony_23.jpg - jak sie tego pozbyć??:)
http://pl2.php.net/manual/pl/function.imagerotate.php
bgd_color
Specifies the color of the uncovered zone after the rotation
Albo w skrócie RT(f)M ;)
czyli co powinienem podać żeby to "czarne" było przeźroczyste ??
używasz imagejpeg, a z tego co się orientuję tam nie ma kanału alfa.
Musisz użyć albo gif, albo png ...
Aha i pewnie przyda Ci się
http://pl2.php.net/manual/pl/function.imagecolortransparent.php
hmmm.... przerobiłem swój kod na coś takiego:
$image = 'CHeadN_S1.gif';
$degrees = 0;
for ($degrees = 1; $degrees <= 10; $degrees++) {
header('Content-type: image/gif') ;
$source = imagecreatefromgif($image) ;
$rotate = imagerotate($source, $degrees) ;
imagegif($rotate, "zielony/zielony_".$degrees.".gif") ;
}
ale teraz PHP zwraca mi błąd Obrazek "http://localhost/obrazek.php" nie może zostać wyświetlony, ponieważ zawiera błędy. :/
qurcze, próbuje różne przykłady i zawsze jest albo czarne, albo niebieskie tło... :/
tu po kolei jakie funkcje stosowac
http://4programmers.net/Forum/453753#id453753
daj wiecej kodu (czy startowy obrazek to jpg czy png/gif ?)
startowy obrazek to GIF (ale mogę zrobić z niego PNG jak trzeba). Docelowo ma być GIF (lub PNG).
mam 1 zdjęcie i muszę je obrócić we wszystkie możliwe strony (od 1 do 360 stopni).
Mój kod wygląda tak jak ten na górze, lub tak:
$im = imagecreatefrompng('CHeadN_S1.png');
$tr = imagecolortransparent( $im );
$r = imagerotate( $im, 95, $tr );
imagesavealpha( $r, true );
header( 'Content-type: image/png' );
imagepng($r);
header( 'Content-type: image/gif' );
$filename = 'CHeadN_S1.gif'; // any transparent gif
$source = imagecreatefromgif( $filename );
imagefilter( $source, IMG_FILTER_GAUSSIAN_BLUR );
// Set background transparent
imagecolortransparent( $source, imagecolorat( $source, 1, 1 ) );
imagegif( $source );
imagedestroy( $source );
niestety żadna kombinacja nie działa...:(
w tym przypadku problem pewnie lezy po stronie filtru (tu tez nalezalo by zadbac o przeroczystosc)
<?php
$filename = 'CHeadN_S1.png';
$source = imagecreatefrompng( $filename );
$r = imagerotate( $source, 95, -1 );
imagealphablending($r, true);
imagesavealpha($r, true);
header( 'Content-type: image/png' );
imagepng($r);
imagedestroy( $source );
imagedestroy( $r );
?>
to dziala zakladajac ze mamy png jak ten z bialym transparent
http://www.eksiegarnia.net/autka/CHeadN_S1.gif
coś jeszcze jest nie tak :/
coś dalej nie działa ://
Próbowałem też z gif - mam taki kod:
$filename = 'CHeadN_S1.gif';
$source = imagecreatefromgif( $filename );
$r = imagerotate( $source, 95, -1 );
imagealphablending($r, true);
imagesavealpha($r, true);
header( 'Content-type: image/gif' );
imagegif($r);
imagedestroy( $source );
imagedestroy( $r );
(czyli Twój) i plik: www.eksiegarnia.net/autka/org.gif
Przeglądarka zwraca błąd:
Obrazek nie może zostać wyświetlony, ponieważ zawiera błędy...
Skoro uparleś się na gifa (mimo, że png byłby dużo lepszy jeśli chodzi o brzegi obróconego obrazka)
$filename = 'org.gif';
$source = imagecreatefromgif( $filename );
$color = imagecolorat($source, 0, 0);
$r = imagerotate( $source, 45, $color );
$color = imagecolorat($r, 0, 0);
imagecolortransparent($r, $color);
header( 'Content-type: image/gif' );
imagegif($r);
imagedestroy( $source );
imagedestroy( $r );
dzięki za przykład - działa :) jak to teraz zapisać do pliku??:)
ps. strasznie "obszarpane" są te zdjęcia momentami - nie da się tego jakoś poprawić:/
kod z png:
$filename = 'CHeadN_S1.png';
$source = imagecreatefrompng( $filename );
$color = imagecolorat($source, 0, 0);
$r = imagerotate( $source, 50, $color );
$color = imagecolorat($r, 0, 0);
imagecolortransparent($r, $color);
header( 'Content-type: image/png' );
imagepng($r);
imagedestroy( $source );
imagedestroy( $r );
zwraca obrazek jeszcze gorszej jakości niż z GIF...
Bo zkiepsciles cos, podalem kod i tu przyklad
Moj kod
i to chyba efekt twojego
hmmm... zgadza się, to moje.... dlaczego Twoje są takie ładne?? :|
Bo masz jakiegos skopanego PNG
<?php
if (isset($_GET['b']))
{
$filename = 'zielony_90.png';
}else{
$filename = 'CHeadN_S1.png';
}
$source = imagecreatefrompng( $filename );
$a = 0;
if (isset($_GET['a'])) $a = (int)$_GET['a'];
$r = imagerotate( $source, $a, -1 );
imagealphablending($r, true);
imagesavealpha($r, true);
header( 'Content-type: image/png' );
imagepng($r);
imagedestroy( $source );
imagedestroy( $r );
?>
aby uprzedzic pytanie, ja go zrobilem w gimpie, drugiego przekonwertowalem na probe w irfan view i o dziwo jest gorszy (gubi przezroczystosc przy obrocie ?! i jest mniejszy o jakies 30 bajtow).
www.eksiegarnia.net/autka/org - tu są oryginalne pliki (GIF)
przerabiałem je PAINT .NET na format PNG i wtedy poprzez PHP
chciałem je obracać...
Z jakiego png (oryginalnego Ty korzystasz)??:) czym przerobić te GIFy żeby działało??
che che juz odpowiedzialem - patrz edycja
qurcze, zrobiłem export w gimpie i jest jeszcze gorzej - doszły znowu te czarne boki ://
jaką masz wersję PHP?? Może mam jakąś starszą - która ma problemy z grafikami??
ps. masz maila;)
trzeba znajdywac wyjscia z opresji
<?php
if (isset($_GET['c']))
{
$c = 1;
$c = (int)$_GET['c'];
if (($c<1) || ($c>6)) $c = 1;
$ff = "CHeadN_S".$c.".gif";
$ti = imagecreatefromgif($ff);
list($tiwidth, $tiheight) = getimagesize($ff);
$thumb = imagecreatetruecolor($tiwidth, $tiheight);
imagealphablending($thumb, false);
$color = imagecolorallocatealpha($thumb, 255, 255, 255, 127);
imagefill($thumb, 0, 0, $color);
imagesavealpha($thumb, true);
imagecopyresampled($thumb, $ti, 0, 0, 0, 0, $tiwidth, $tiheight, $tiwidth, $tiheight);
$source = $thumb;
}else{
if (isset($_GET['b']))
{
$filename = 'zielony_90.png';
}else{
$filename = 'CHeadN_S1.png';
}
$source = imagecreatefrompng( $filename );
}
$a = 0;
if (isset($_GET['a'])) $a = (int)$_GET['a'];
$r = imagerotate( $source, $a, -1 );
imagealphablending($r, true);
imagesavealpha($r, true);
header( 'Content-type: image/png' );
imagepng($r);
imagedestroy( $source );
imagedestroy( $r );
?>
extra -działa:DDD dzięki WIELKIE :))))