GD+PHP

1 отговора 76 прегледа
#1

GD+PHP

Imam slednia problem. Instalirah php 4.3.8 i GD 2.0.26. Wsichko se kompilira i instalira bez problem. Daje i jpeg biblitotekata kachih.

No sega kogato promenia razmera na daden jpeg fail w po maluk ili po goliam se gubi dosta chuvstwitelno kachestowoto. Wijte po dolu razlikata. Pri png i gif niamam problem s towa. Samo pri Jpeg failovete mi go prawi taka.



Отговор
в отговор на GD-PHP #2

Re: GD+PHP

probvai tazi funkcia, vzeh ia niakade ot helpa na php-to. No e dosta bavna. Mislia, che da imash gore-dolu prilichno kachestvo,triabva da izpolzvash ImageColorAllocate, no sum zabravil, taka che pregledai podrobmo helpa. Nai-dobre stava s tazi funkcia, no ne me pitai kak raboti - ne razbiram ot matematika. Samo che neistina raboti bavno i ako posle shte vkarvash kartinkite vav flash, poniakoga izobshto ne izlizat.

function ImageCopyResampleBicubic ($dst_img, $src_img, $dst_x, $dst_y,$src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h) {
/*
for ($i = 0; $i < imagecolorstotal($src_img); $i++)
{
$colors = ImageColorsForIndex ($src_img, $i);
ImageColorAllocate ($dst_img, $colors['red'],$colors['green'], $colors['blue']);
}
*/
$scaleX = ($src_w - 1) / $dst_w;
$scaleY = ($src_h - 1) / $dst_h;
$scaleX2 = $scaleX / 2.0;
// $scaleY2 = $scaleY / 2.0;
// $scaleX2 = $scaleX / 1.5;
$scaleY2 = $scaleY / 1.5;
for ($j = $src_y; $j < $src_y + $dst_h; $j++)
{

$sY = $j * $scaleY;
for ($i = $src_x; $i < $src_x + $dst_w; $i++)
{
$sX = $i * $scaleX;
$c1 = ImageColorsForIndex ($src_img, ImageColorAt($src_img, (int) $sX, (int) $sY + $scaleY2));
$c2 = ImageColorsForIndex ($src_img, ImageColorAt($src_img, (int) $sX, (int) $sY));
$c3 = ImageColorsForIndex ($src_img, ImageColorAt($src_img, (int) $sX + $scaleX2, (int) $sY + $scaleY2));
$c4 = ImageColorsForIndex ($src_img, ImageColorAt($src_img, (int) $sX + $scaleX2, (int) $sY));
$red = (int) (($c1['red'] + $c2['red'] + $c3['red'] + $c4['red']) / 4);
$green = (int) (($c1['green'] + $c2['green'] + $c3['green'] + $c4['green']) / 4);
$blue = (int) (($c1['blue'] + $c2['blue'] + $c3['blue'] + $c4['blue']) / 4);
$color = ImageColorClosest ($dst_img, $red, $green,$blue);
ImageSetPixel ($dst_img, $dst_x + $i - $src_x, $dst_y + $j - $src_y,$color);
}
}
}

Отговор