在线看片电视剧免费看,精品国产一区二区三区2021,99久久久无码国产精品免费,精品人妻少妇嫩草AV无码专区

    電話(huà)

    0411-39943997

仟億科技
客服中心
  • 電話(huà)
  • 電話(huà)咨詢(xún):0411-39943997
  • 手機
  • 手機咨詢(xún):15840979770
    手機咨詢(xún):13889672791
網(wǎng)絡(luò )營(yíng)銷(xiāo) >更多

點(diǎn)擊熱力圖的技術(shù)如何實(shí)現

作者:billionnet 發(fā)布于:2012/5/12 17:26:52 點(diǎn)擊量:

一、捕捉用戶(hù)點(diǎn)擊行為

這部分需要Javascript來(lái)實(shí)現。為了不陷入瀏覽器兼容的泥潭,可以選擇JQuery:

之所以要記錄屏幕分辨率是因為有的情況下需要修正點(diǎn)擊坐標。比如說(shuō),一個(gè)居中顯示的定寬的頁(yè)面,其同一個(gè)位置在不同分辨率下的坐標是不同的,當渲染圖片的時(shí)候,坐標需要以一個(gè)分辨率為準進(jìn)行修正。另外,如果用戶(hù)正在拖動(dòng)滾動(dòng)條,是不應該記錄的。

二、分析客戶(hù)端點(diǎn)擊日志

客戶(hù)端使用Ajax通過(guò)GET方法觸發(fā)一個(gè)空HTML頁(yè)面,如此就會(huì )在服務(wù)端留下日志:

page_x=...&page_y=...&screen_width=...&screen_height=...

不同的日志格式,結果會(huì )有所不同,這里僅僅以此為例來(lái)說(shuō)明問(wèn)題,本文采用AWK來(lái)解析日志,當然你也可以使用Perl或別的你熟悉的語(yǔ)言:

#!/usr/bin/awk -f

BEGIN {
    FS="&";
}

NF == 4 {
    param["page_x"]        = "0";
    param["page_y"]        = "0";
    param["screen_width"]  = "0";
    param["screen_height"] = "0";

    split($0, query, "&");

    for (key in query) {
        split(query[key], item, "=");
        if (item[1] in param) {
                param[item[1]] = item[2];
        }
    }

    print "page_x:"       , param["page_x"];
    print "page_y:"       , param["page_y"];
    print "screen_width:" , param["screen_width"];
    print "screen_height:", param["screen_height"];

    print "\n";
}

至于數據的持久化,是使用MongoDB或者別的。

三、使用日志分析結果渲染圖片

以Imagick為例,代碼如下:

newImage(1000, 1000, new ImagickPixel('white'));
$heatmap_image->setImageFormat('png');

$plot_image = new Imagick('plot.png');

$iterator = $plot_image->getPixelIterator();
foreach($iterator as $row) {
    foreach ($row as $pixel) {
        $colors = $pixel->getColor();
        foreach (array('r', 'g', 'b') as $channel) {
            $color = $colors[$channel];
            if ($color !== 255) {
                $colors[$channel] = $color + ((255 - $color) * $opacity);
            }
        }

        $pixel->setColor("rgb({$colors['r']},{$colors['g']},{$colors['b']})");
    }

    $iterator->syncIterator();
}

$plot_size = $plot_image->getImageGeometry();

foreach ($coordinates as $pair) {
    $heatmap_image->compositeImage(
        $plot_image,
        Imagick::COMPOSITE_MULTIPLY,
        $pair[0] - $plot_size['width'] / 2,
        $pair[1] - $plot_size['height'] / 2
    );
}

$color_image = new Imagick('clut.png');

$heatmap_image->clutImage($color_image);

$heatmap_image->writeImage('heatmap.png');

?>

代碼雖然很多,但并不復雜,其中用到了兩個(gè)圖片,分別是:plot.pngclut.png。實(shí)際應用時(shí),有時(shí)候點(diǎn)擊量會(huì )非常大,此時(shí)沒(méi)有必要把所有的點(diǎn)擊都渲染出來(lái),而應該采取隨機取樣的策略,如果采用MongoDB持久化的話(huà),可以參考:The Random Attribute。

備注:代碼參考image-tempest。

四、熱力圖的最終展現

形象一點(diǎn)來(lái)說(shuō),其實(shí)就是通過(guò)CSS+Javascript把生成的圖片蓋在網(wǎng)頁(yè)上,并調節圖片透明度來(lái)達到合二為一的效果。

熱點(diǎn)可能會(huì )隨著(zhù)時(shí)間改變,為了能對照某個(gè)時(shí)間的網(wǎng)頁(yè),可以使用CutyCapt截屏。

有關(guān)Heatmap的詳細介紹,還可以參考

Heatmap雖然不是很復雜的技術(shù),但涉及的方面卻很繁雜,希望本文能幫到大家。

開(kāi)源熱力圖程序推薦:clickheat

基于clickheat開(kāi)發(fā)的Heatmap plugin for Piwik:http://dev.piwik.org/trac/ticket/73

另外一塊鼠標點(diǎn)擊跟蹤開(kāi)源程序:http://code.google.com/p/smt2/

  



分享到:


Copyright@ 2011-2016 版權所有:大連千億科技有限公司 遼ICP備11013762-3號   google網(wǎng)站地圖   百度網(wǎng)站地圖   網(wǎng)站地圖

公司地址:大連市沙河口區中山路692號辰熙星海國際2317 客服電話(huà):0411-39943997 QQ:2088827823 37482752

法律聲明:未經(jīng)許可,任何模仿本站模板、轉載本站內容等行為者,本站保留追究其法律責任的權利! 隱私權政策聲明

亚洲AV成人WWW永久无码精品| 中文字字幕在线乱码| 我把护士日出水了视频| 人妻无码一区二区三区| 久久精品国内一区二区三区| 高清有码国产一区二区|