$img = imagecreatefrompng("img/".$image);
$w = imagesx($img);
$h = imagesy($img);
$pixelcount = 0;
echo "<div id='container' style='width: {$w}px; height: {$h}px;'>\r\n";
for($y=0;$y<$h;$y++) {
for($x=0;$x<$w;$x++) {
$rgb = imagecolorat($img, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
$alpha = (imagecolorat($img,$x,$y) & 0x7F000000) >> 24;
if($alpha == 127)
$newcolor = "transparent";
else
$newcolor = sprintf('#%02X%02X%02X', $r, $g, $b);
if(isset($prevcolor) && strcmp($newcolor, $prevcolor) != 0)
{
echo "<div style='background: {$prevcolor}; height: 1px; width: {$pixelcount}px; float: left;'></div>\r\n";
$pixelcount = 0;
}
$prevcolor = $newcolor;
$pixelcount++;
}
echo "<div style='background: {$prevcolor}; height: 1px; width: {$pixelcount}px; float: left;'></div>\r\n";
unset($prevcolor);
$pixelcount = 0;
}
echo "</div>\r\n";
这是该工具当前形式的链接。
http://schnell.dreamhosters.com/folio/pixelread.php?image=link.png
鼠标滚轮向上,I 和 +/= 键放大。鼠标滚轮向下,O 和 -/_ 键缩小。无需关注任何特定元素,整个文档都记录了一次击键/鼠标滚轮。
编辑 - 感谢您修复了那个问题,伙计们!不过现在换了一个新的。如果您转到该工具并试图通过放大将其炸毁, Sprite 就会分崩离析。如果你不管它什么都不做,它看起来很好。奇怪的是,你不能通过重置大小来修复图片,它会一直乱七八糟,直到你刷新页面。
Edit2 - 找到问题的根源。
function resize(width, height)
{
$('div#container').css('height', factor * height);
$('div#container').css('width', factor * width);
$('div#container > div').css('height', factor).css('width', function(i, val) { return parseInt(val * factor) + 'px'; });
$('div#container').css('margin-top', ($(window).height() - $('div#container').height())/2 + "px");
}
由于某种原因,宽度没有乘以“因子”。我正在尝试以 jQuery 对每个子 div 执行此操作的方式来执行此操作,将新宽度基于旧宽度,而不必执行巨大的 for 循环或任何操作,但我想不出的是工作。
Edit3 - 终于成功了!我只是将每个 div 的原始长度存储为每个 div 中的“id”属性,然后在需要调整所有内容大小时访问它。感谢所有忍受这件事并坚持让我坚持到底的人。我发誓调整大小比以前更顺畅! :D
最佳答案
您的代码不会在每次运行颜色后重置像素数。我想你需要这个:
if(isset($prevcolor) && strcmp($hex, $prevcolor) != 0) {
echo "<div style='background: {$prevcolor}; height: 1px; width: {$pixelcount}px; float: left;'></div>\r\n";
$pixelcount = 0;
}
关于php - 尝试优化像素读取和输出功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3749031/