php-尝试优化像素读取和输出功能

$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和-/ _键放大.无需关注任何特定元素,整个文档都会注册一个按键/鼠标轮.

编辑-感谢您解决该问题,伙计们!现在有一个新的.如果您使用该工具并尝试通过放大将其炸毁,则精灵会散开.如果您不理会它,什么也不做,则看起来不错.同样很奇怪的是,您无法通过重置大小来固定图片,直到刷新页面之前,它都会变得混乱.

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的原始长度作为’id’属性存储在每个div中,然后在需要调整大小时访问它.感谢所有忍受这个问题并坚持与我合作的人.我发誓调整大小比以前更平滑! :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;
    }
上一篇:在我的iPhone上渲染时,为什么Unity3D精灵看起来像像素化?


下一篇:如何使用php查找最暗的像素?