我似乎遇到了几行代码的问题,因为它在xampp上的本地服务器上运行,但是当我通过FTP上传到我的域时它不再有效。我附上了代码段以及它包含的文件。域所做的只是完全忽略代码并继续进行,就好像它不存在一样。任何帮助都提前赞赏!
代码段
<?php
include_once("colors.inc.php");
$ex=new GetMostCommonColors();
$ex->image="http://maps.googleapis.com/maps/api/staticmap?center=25.437484181498,-89.594942854837&zoom=50&size=600x300&maptype=roadmap&markers=color:blue&sensor=false";
$colors=$ex->Get_Color();
$how_many=12;
$colors_key=array_keys($colors);
?>
colors.inc.php
<?php
class GetMostCommonColors
{
var $image;
function Get_Color()
{
if (isset($this->image))
{
$PREVIEW_WIDTH = 150; /
$PREVIEW_HEIGHT = 150;
$size = GetImageSize($this->image);
$scale=1;
if ($size[0]>0)
$scale = min($PREVIEW_WIDTH/$size[0], $PREVIEW_HEIGHT/$size[1]);
if ($scale < 1)
{
$width = floor($scale*$size[0]);
$height = floor($scale*$size[1]);
}
else
{
$width = $size[0];
$height = $size[1];
}
$image_resized = imagecreatetruecolor($width, $height);
if ($size[2]==1)
$image_orig=imagecreatefromgif($this->image);
if ($size[2]==2)
$image_orig=imagecreatefromjpeg($this->image);
if ($size[2]==3)
$image_orig=imagecreatefrompng($this->image);
imagecopyresampled($image_resized, $image_orig, 0, 0, 0, 0, $width, $height, $size[0], $size[1]);
$im = $image_resized;
$imgWidth = imagesx($im);
$imgHeight = imagesy($im);
for ($y=0; $y < $imgHeight; $y++)
{
for ($x=0; $x < $imgWidth; $x++)
{
$index = imagecolorat($im,$x,$y);
$Colors = imagecolorsforindex($im,$index);
$Colors['red']=intval((($Colors['red'])+15)/32)*32;
$Colors['green']=intval((($Colors['green'])+15)/32)*32;
$Colors['blue']=intval((($Colors['blue'])+15)/32)*32;
if ($Colors['red']>=256)
$Colors['red']=240;
if ($Colors['green']>=256)
$Colors['green']=240;
if ($Colors['blue']>=256)
$Colors['blue']=240;
$hexarray[]=substr("0".dechex($Colors['red']),-2).substr("0".dechex($Colors['green']),-2).substr("0".dechex($Colors['blue']),-2);
}
}
$hexarray=array_count_values($hexarray);
natsort($hexarray);
$hexarray=array_reverse($hexarray,true);
return $hexarray;
}
else die("You must enter a filename! (\$image parameter)");
}
}
?>
答案 0 :(得分:2)
我同意@Rodrigo Brun,但也鼓励您查看您的托管客户端是否支持PHP中的GD库。您可以通过在目录中创建包含内容<?php phpinfo(); ?>
的页面来查看它是否支持GD。有时这是关闭的,可以通过编辑php.ini文件轻松修复。我有一个类似的问题,这解决了它运气好,希望这有帮助!
答案 1 :(得分:1)
默认情况下,大多数Web服务器不允许使用基本功能从url(远程文件)打开文件,例如file_get_contents(&#34; http:// ....&#34;)或getimagesize(&#34) ; HTTP://...")。这是一个安全问题,不建议使用此方法获取远程图像或文件的属性。试试Curl库,它更安全,并为此建立。
但是在本地服务器中,通常你的php可以通过基本功能打开远程文件。
因此,您可以修改您的php.ini(搜索&#34; allow_url_fopen&#34;,并将值设置为&#34; 1&#34;),或者,您可以在您的PHP代码中使用direct(第一行),
ini_set("allow_url_fopen",1);
这个功能是&#34;替换&#34; php.ini中的配置,但没有更改原始的php.ini文件,仅在执行时间。
恢复:您的问题的两个答案是可用的,CURL或INI_SET(allow_url_fopen)。
希望我有所帮助。
[已编辑] -----------
嗨,以下代码适合您的要求,使用curl库获取图像的宽度,高度和Mime类型(在INTEGER和STRING值中)。
只需将这3个功能添加到您的班级&#34; {}&#34;。在var $image
之后
function getImageBytes(){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $this->image);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$info = curl_exec($ch);
curl_close($ch);
return $info;
}
function getSize(){
$bytes = $this->getImageBytes();
$img = imagecreatefromstring($bytes);
$out = array();
$out[0] = imagesx($img);
$out[1] = imagesy($img);
$f = finfo_open();
$mime = finfo_buffer($f, $bytes, FILEINFO_MIME_TYPE);
$out[2] = $this->getIntMimeType($mime);
$out[3] = $mime;
return $out;
}
function getIntMimeType($m){
switch ($m) {
case "image/gif":
return 1;
case "image/jpeg":
return 2;
case "image/png":
return 3;
default:
return 0;
}
}
现在,为了获得正确的结果,请更改此行
$size = GetImageSize($this->image);
新功能
$size = $this->getSize();
没有必要在新功能中传递参数。它在&#34; getImageBytes&#34;中使用的$this->image
变量功能
函数getIntMimeType($m)
适用于您的条件$size[2]==1
...只是字符串到整数的翻译器。
$size
中索引3的值现在是字符串中的mime-type(例如image / png或image / gif)。
:)