2012-04-04 97 views
0

我需要從PNG圖像中提取每個像素顏色並將其存儲在數據庫表中; 該表具有以下列:id,x,y,color從PNG圖像中提取像素顏色

我做到了,但我需要更快的方式來做到這一點。

我的代碼如下:

<?php 

session_start(); 

?> 
<meta http-equiv="refresh" content="6000" > 
<?php 

if(isset($_SESSION['inserari']))print "inserari: ".$_SESSION['inserari']; 
$_SESSION['inserari']=0; 
require_once("../data-base-connection.php"); 
$im = ImageCreateFromPng("http://www.medievalbattlefield.com/harta-mod-1/x.png"); 

$maxo=4001; 
$maxv=2235; 
$result=mysql_query(" 
select * 
from `map_4001_2235` 
order by `id` desc 
limit 1 
"); 
$n=mysql_num_rows($result); 
$id=0; 
$cv=0; 
$co=0; 


if($n==1) 
{ 
    while($row=mysql_fetch_array($result)) 
    { 
    print " id ".$id=$row['id']; 
    print " cx ".$cv=$row['x']; 
    print " cy ".$co=$row['y']; 
    } 
    $co++; 
    if($co==$maxo+1)$co=0; 
} 

for($a=$cv;$a<=$maxv;$a++) 
{ 
    for($b=$co;$b<=$maxo;$b++) 
    { 

    //print "$a $b"; 
    //if(($b==1000)||($b==2000)||($b==3000)||($b==4000))print " indicator: ".$b; 
    $id++; 
    $_SESSION['inserari']++; 
    $rgb = ImageColorAt($im, $b, $a); 
    $c=dechex($rgb); 

    mysql_query(" 
INSERT INTO `map_4001_2235` (
`id` , 
`x` , 
`y`, 
`color` 
) 
VALUES (
'$id' , '$a', '$b', '$c' 
); 
"); 
    } 
    $co=0; 
} 

mysql_close($connection); 

?> 

回答

1

不要做每個像素的插入,但它們存儲在一個數組,在

INSERT INTO table VALUES (1,1,1),(2,2,2) 
+0

形式使用大容量插入,但有12.000.000記錄 – 2012-04-04 07:30:34

+0

這正是爲什麼。 – 2012-04-04 07:32:22

+0

ty,我會試試這個...但我不認爲我可以在單個查詢中注入12密耳的數據 – 2012-04-04 07:36:27