php gd pixelado demasiado fuerte
(2)
Esto es lo que necesitas (script que uso actualmente). Este script se basa en el script en http://www.talkphp.com/19670-post1.html :
function convertToPixel($im, $size) {
$size = (int)$size;
$sizeX = imagesx($im);
$sizeY = imagesy($im);
if($sizeX < 3 && $sizeX < 3) { // or you can choose any size you want
return;
}
for($i = 0;$i < $sizeX; $i += $size) {
for($j = 0;$j < $sizeY; $j += $size) {
$colors = Array(''alpha'' => 0, ''red'' => 0, ''green'' => 0, ''blue'' => 0, ''total'' => 0);
for($k = 0; $k < $size; ++$k) {
for($l = 0; $l < $size; ++$l) {
if($i + $k >= $sizeX || $j + $l >= $sizeY) {
continue;
}
$color = imagecolorat($im, $i + $k, $j + $l);
imagecolordeallocate($im, $color);
$colors[''alpha''] += ($color >> 24) & 0xFF;
$colors[''red''] += ($color >> 16) & 0xFF;
$colors[''green''] += ($color >> 8) & 0xFF;
$colors[''blue''] += $color & 0xFF;
++$colors[''total''];
}
}
$color = imagecolorallocatealpha($im, $colors[''red''] / $colors[''total''], $colors[''green''] / $colors[''total''], $colors[''blue''] / $colors[''total''], $colors[''alpha''] / $colors[''total'']);
imagefilledrectangle($im, $i, $j, ($i + $size - 1), ($j + $size - 1), $color);
}
}
}
header(''Content-type: image/jpg'');
$im = imagecreatefromjpeg($imgfile);
convertToPixel($im, 15);
imagejpeg($im, '''', 100);
Esto producirá:
También puede cambiar el valor pasado en convertToPixel
para modificar el tamaño de píxel. )
Tengo este script para pixelizar mis imágenes. El script está funcionando, pero quiero bordes más suaves:
$imgfile = ''batman.jpg'';
$image = ImageCreateFromJPEG($imgfile);
$imagex = imagesx($image);
$imagey = imagesy($image);
$pixelate_amount = 10;
$tmpImage = ImageCreateTrueColor($imagex, $imagey);
imagecopyresized($tmpImage, $image, 0, 0, 0, 0, round($imagex / $pixelate_amount), round($imagey / $pixelate_amount), $imagex, $imagey);
$pixelated = ImageCreateTrueColor($imagex, $imagey);
imagecopyresized($pixelated, $tmpImage, 0, 0, 0, 0, $imagex, $imagey, round($imagex / $pixelate_amount), round($imagey / $pixelate_amount));
header("Content-Type: image/jpeg");
imageJPEG($pixelated, "", 100);
Yo tengo:
este producto:
¿hay algo que extraño?
Use imagecopyresampled()
lugar de imagecopyresized()
.