imagescale() mit IMG_NEAREST_NEIGHBOUR funktioniert nicht

Hallöchen,
ich habe ein Problem bei meinem kleinen Script. Ich versuche ein Bild auszuschneiden und das zu Skalieren.
Das mit dem Ausschneiden funktiniert schon mal, aber das mit dem Skalieren nicht zu richtig.
Das Bild soll von 8x8px auf 128x128px skaliert werden, mein Problem ist nur das die Interpolation nicht Nearest Neighbour ist sondern Linear oder Cubic ( weiß nicht so richtig was der unterschied ist auf jeden Fall mag ich beide in diesem Fall nicht ).
Wenn ich das Bild auf 8x8px lasse und mit 128x128px über den <img> - Tag anzeigen lasse wird das Bild trotzdem unscharf angezeigt.
Ich bitte um Hilfe oder Rat.
Benutze XAMPP Version 1.8.3 ( müsste laut Homepage PHP Version 5.5.11 sein )

PHP:
$username = 'Notch'; //Nur so als Beispiel :D
$size = array(8,8);
$point = array(8,8);
$image = imagecreatefrompng('http://s3.amazonaws.com/MinecraftSkins/'.$username.'.png');
$new = imagecreatetruecolor(8,8);
imagecopy($new, $image, 0,0, $point[0],$point[1],$size[0],$size[1]);

$new = imagescale($new, 128, 128,   IMG_NEAREST_NEIGHBOUR); 
/* 
Wenn ich diese Zeile auskommentiere ist das Bild nicht verunschärft
nur zu klein, dass es im Browser automatisch verunschärft wird bei größeren Sizes.
*/
imagepng($new,'skins/heads/'.$username.'.png',9);

P.S. Wenn es eine andere Möglichkeit gibt Bilder via HTML anzeigen zu lassen ohne, dass sie an Qualität leidet, wäre es mir auch lieb.
 

Anhänge

  • Notch.png
    Notch.png
    4,4 KB · Aufrufe: 17
  • Notch_ohne.png
    Notch_ohne.png
    118 Bytes · Aufrufe: 16
Es dürfte vermutlich in der Natur der Sache liegen, dass nach 16-facher Vergrößerung der Bildausschnitt unscharf (verpixelt) daherkommt.

Sorry, das war eine Fehleinschätzung, wie der weitere Verlauf zeigt.
_______________
[edit]Revision[/edit]
 
Zuletzt bearbeitet:
Nearest Neighbour ist aber der Modus der Pixelwiederholung, also sollten 16px nebeneinander die selbe Farbe haben.
z.B. Bild mit 3x3px
{
w, b, r
b, r, g
r, g, y
}
bei der Skallierung mit Nearest Neighbour auf 9x9px
{
w, w, w, b, b, b, r, r, r
w, w, w, b, b, b, r, r, r
w, w, w, b, b, b, r, r, r
b, b, b, r, r, r, g, g, g
b, b, b, r, r, r, g, g, g
b, b, b, r, r, r, g, g, g
r, r, r, g, g, g, y, y, y
r, r, r, g, g, g, y, y, y
r, r, r, g, g, g, y, y, y
}
w: white
b: blue
r: red
g: green
y: yellow
So dass sich die Farben nicht mischen.
Mein Problem ist ja eher das der Modus nicht funktioniert :/
 
Mit der GD Library könntest du es in PHP ganz einfach machen:

PHP:
<?php
// create GD image resource from source image file
$src = imagecreatefromgif('test.gif');
// create new GD image resource with indexed color
$dest = imagecreate(64, 64);
// copy/resize image without resampling
imagecopyresized($dest, $src, 0, 0, 0, 0, 64, 64, 16, 16);
// output result
header('Content-type: image/gif');
imagegif($dest);
?>


http://stackoverflow.com/a/4579964
 
Hab es hinbekommen, auch wenn es mir fraglich ist das der Nearest Neighbour Mode nicht ging
PHP:
$username = "Notch";

$image = imagecreatefrompng("http://s3.amazonaws.com/MinecraftSkins/".$username.".png");
$new = imagecreatetruecolor(128,128);
imagecopyresized($new, $image, 0, 0, 8, 8, 128, 128, 8, 8);
//$new = imagescale($new, 128, 128, IMG_NEAREST_NEIGHBOUR);
imagepng($new, "skins/heads/".$username.".png");
echo '<img src="./skins/heads/'.$username.'.png"/>';
 
Frag mich nicht zuviel, da HTML nicht mehr so mein Gebiet ist, jedoch glaube ich, dass man die Interpolation erst der Browser-Engine mitteilen muss.

zB. so hier:
PHP:
context['imageSmoothingEnabled'] = value;
context['mozImageSmoothingEnabled'] = value;
context['oImageSmoothingEnabled'] = value;
context['webkitImageSmoothingEnabled'] = value;
context['msImageSmoothingEnabled'] = value;


EDIT: Verwendest du zum Testen Firefox? Dort ist Nearest Neighbour glaub ich als Standard-Interpolation eingestellt.
 
Ähm ja ich verwende Firefox, aber auch Chrome. Aber ich hab es ja hinbekommen also bin ich auch froh darüber :D
Ich hab irgendwie was gehört, dass es auch mit Canvas geht aber damit hab ich noch nie gearbeitet und hab daher auch keine Ahnung ._.
 
Zurück