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

标签 php css html pixel

$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/

相关文章:

javascript - Angular/Webpack 没有将 styleUrls 绑定(bind)到组件

javascript - 为响应式背景图像创建提示

javascript - 使用 HTML5 通过 AJAX 上传一些文件时的整体进度条

php - 如何更改 'Timestamp' - MySql 中的列语言?

php - 谷歌地图从 mysql 表慢

php - 检测多维数组中的新排列

Web 浏览器每个 Angular 落的 CSS 背景图像

php - 图像无法正常显示

jquery - 将元素放在进度条顶部的另一个元素的右侧

html - 为什么我不能让 "bill-photo"居中?