AJAX ТЕХНОЛОГИЯ

Титульная > Общее описание > Подпрограммы


_

Обработка MMS данных

Клиентское приложение может заказывать обработку данных, в частности, MMS сообщений, накапливаемых в виде фотографий на некотором сервере. PHP-процедура putdata.php помещает в light.xml освещенность фото, если password, передаваемый методом POST, равен light.

Файл putdata.php

<?
if (isset($_POST["password"])){
$name=$_POST["password"]; $message=$_POST["data"];
}
else {
$name='data'; $message=$_POST["data"];
}
$file_ms=$name.".xml";

if (substr($name,0,5)=='light') {
$image=imagecreatefromjpeg($message);
$imgWidth=imagesx($image); $imgHeight=imagesy($image); $S=0.0; $N=0;
for ($i=0; $i<=($imgWidth); $i++) {
for ($j=0; $j<=($imgHeight); $j++) {
$imgColor=imagecolorat($image,$i,$j);
list($r,$g,$b)=array_values(imageColorsForIndex($image,$imgColor));
$L=$r*$r+$g*$g+$b*$b; $S=$S+sqrt($L)/255; $N++;
}} $S=$S/$N; imagedestroy($image); $message=$S;
}

if (substr($name,0,11)=='temperature') {
$image=imagecreatefromjpeg($message);
$imgWidth=imagesx($image); $imgHeight=imagesy($image); $M=0; $N=0;
for ($i=0; $i<=($imgWidth); $i++) {
for ($j=0; $j<=($imgHeight); $j++) {
$imgColor=imagecolorat($image,$i,$j);
list($r,$g,$b)=array_values(imageColorsForIndex($image,$imgColor));
$A=($r+$g+$b)/3; $R=$b/$A; $N++; if ($R>$M) { $M=$R; }}};
$D=0;
for ($k=$imgHeight; $k>=0; $k--) { if ($D==0) {
for ($j=0; $j<=($imgWidth); $j++) {
$imgColor=imagecolorat($image,$j,$k);
list($r,$g,$b)=array_values(imageColorsForIndex($image,$imgColor));
$A=($r+$g+$b)/3; $R=$b/$A; $R=$R-0.43*$M;
if ($D==0) { if ($R>0) { $D=$k; }}}}};
$U=0;
for ($k=0; $k<=($imgHeight); $k++) { if ($U==0) {
for ($j=0; $j<=($imgWidth); $j++) {
$imgColor=imagecolorat($image,$j,$k);
list($r,$g,$b)=array_values(imageColorsForIndex($image,$imgColor));
$A=($r+$g+$b)/3; $R=$b/$A; $R=$R-0.43*$M;
if ($U==0) { if ($R>0) { $U=$k; }}}}};
$S=($D-$U)/$imgHeight; $S=24*$S/0.4; imagedestroy($image); $message=$S;
}

$message=StripSlashes('<?xml version="1.0" encoding="UTF-8"?><root><data>'.$message.'</data></root>');
$deleted = unlink($file_ms);
$fp = fopen($file_ms,"a+"); $fw = fwrite($fp,$message); fclose($fp);
?>

Процедура позволяет также измерить на фотографии относительную высоту синего столбика термометра и поместить результат в temperature.xml (если password принимает значение temperature). Ajax запрос варианта обработки фотографии размещена ниже. Константа serveraddressreceive содержит URL папки с XML-документами на сервере. URL фотографии передается в качестве второго параметра data.

<script language='JavaScript'>
     function ajaxWrite(password,putmessage){
       var xmlObj2 = null;
       var contentType = "application/x-www-form-urlencoded; charset=UTF-8";
       if(window.XMLHttpRequest){
         xmlObj2 = new XMLHttpRequest();
       } else if(window.ActiveXObject){
         xmlObj2 = new ActiveXObject("Microsoft.XMLHTTP");
       } else {
         return;
       }
       xmlObj2.open ('POST',serveraddressreceive+'putdata.php',true);
       xmlObj2.setRequestHeader("Content-Type", contentType);
       xmlObj2.send('password='+password+'&data='+putmessage);
     }
</script>

Вывод информации на экран

Этот пример показывает, как вывести данные, пользуясь PHP, на экран в виде графика.

<?
// Инициализировать данные для графика
$graphValues=array(0,80,23,11,190,245,50,80,111,240,55);

// Создать графический массив
header("Content-type: image/png");
$imgWidth=250; $imgHeight=250;
$image=imagecreate($imgWidth, $imgHeight);

$colorWhite=imagecolorallocate($image, 255, 255, 255);
$colorGrey=imagecolorallocate($image, 192, 192, 192);
$colorBlue=imagecolorallocate($image, 0, 0, 255);
$colorDarkBlue=imagecolorallocate($image, 50, 170, 200);
$colorLightBlue=imagecolorallocate($image, 50, 200, 250);

// Бордюр вокруг изображения
imageline($image, 0, 0, 0, 250, $colorGrey);
imageline($image, 0, 0, 250, 0, $colorGrey);
imageline($image, 249, 0, 249, 249, $colorGrey);
imageline($image, 0, 249, 249, 249, $colorGrey);

// Сетка
for ($i=1; $i<11; $i++){
imageline($image, $i*25, 0, $i*25, 250, $colorGrey);
imageline($image, 0, $i*25, 250, $i*25, $colorGrey);
}

// График в виде бар-сэта
for ($i=0; $i<10; $i++){
imagefilledrectangle($image, $i*25, (250-$graphValues[$i]), ($i+1)*25, 250, $colorDarkBlue);
imagefilledrectangle($image, ($i*25)+1, (250-$graphValues[$i])+1, (($i+1)*25)-5, 248, $colorLightBlue);
}
// График в виде линий (альтернатива)
// for ($i=0; $i<10; $i++){
// imageline($image, $i*25, (250-$graphValues[$i]), ($i+1)*25, (250-$graphValues[$i+1]), $colorBlue);
// }

// Вывести картинку и очистить память
imagepng($image);
imagedestroy($image);
?>

artspb.com   

 


 

_