我需要在PHP中创建灰度图像.我不是在谈论其调色板中具有灰度值的索引图像,而是关于真正的灰度图像.区别在于PNG的第26个字节(颜色类型):
0 - greyscale <-- THIS IS WHAT I NEED
2 - RGB
3 - RGB with palette
4 - greyscale + alpha
6 - RGB + alpha
Run Code Online (Sandbox Code Playgroud)
(有关详细信息,请参阅如何检查PNG的灰度/ alpha颜色类型?)
我尝试imagefilter($im, IMG_FILTER_GRAYSCALE);过,imagetruecolortopalette($im, false, 255);但我得到的是RGB灰度图像(颜色类型2)或带有灰度调色板(颜色类型3)的RGB调色板图像.我也试图初始化图像,imagecreate()而不是imagecreatetruecolor()再次,这只会导致调色板图像.
有没有办法用PHP的GD函数(或PHP中的任何其他函数)创建颜色类型0灰度PNG?
以下是一些不同灰度图像的样本,以显示我的意思.它们看起来都一样,但是如果你在PhotoShop中打开它们并查看图像 - >模式设置,你会看到差异.十六进制编辑器也会显示第26个字节的差异:
RGB,颜色类型 2,31449字节
RGB调色板,颜色类型 3,3971字节
真灰度图像,颜色类型 0,1105字节< - 这是我需要的
更新01:
这是我用来创建PNG的基本代码.注释行是我尝试的替代方案:
//$im = imagecreate($image_size, $image_size);
$im = imagecreatetruecolor($image_size, $image_size);
//imagefilter($im, IMG_FILTER_GRAYSCALE);
//imagetruecolortopalette($im, false, 255);
imagepng($im, $imgPathName);
imagedestroy($im);
Run Code Online (Sandbox Code Playgroud) 我正在寻找一个为什么要计算一个合适的背景颜色和文本的颜色将超过顶部,显然我需要考虑可读性和可访问性.
我需要从数组中选择两种颜色,颜色存储在它们的十六进制表示中.
#CC9966
#996633
#FFCC99
#CCCC99
#000000
#333333
#666633
#663333
#CC9933
#FFCCCC
Run Code Online (Sandbox Code Playgroud)
我可以使用像GD/imageMagick这样的PHP库吗?
任何建议(请注意我使用的是PHP)
我目前正在研究颜色操作/选择等,并且遇到了以下代码.我想知道有人可以告诉我下面的代码是做什么的,并为我分解,谢谢!
$newVal = round(round(($rgb['red'] / 0x33)) * 0x33);
Run Code Online (Sandbox Code Playgroud)
特别是什么是0x33
谢谢你的意见
我有两个PNG文件,"red.png"和"blue.png"; 它们都是透明的,但在不同的地方有一些像素的红色或蓝色斑点.
我想制作一个融合两者的PHP脚本; 它应该像以下一样简单:
$original = getPNG('red.png');
$overlay = getPNG('blue.png');
imagecopymerge($original, $overlay, 0,0, 0,0, imagesx($original), imagesy($original), 100);
header('Content-Type: image/png');
imagepng($original);
Run Code Online (Sandbox Code Playgroud)
当我运行这个脚本时,我得到的只是蓝点 - 透明度丢失了.我看到我应该添加这些:
imagealphablending($original, false);
imagesavealpha($original, true);
Run Code Online (Sandbox Code Playgroud)
(在原始和重叠上?)这似乎没有任何帮助.
我在PHP.net上看到了一些解决方法,可以解决这个问题:
$throwAway = imagecreatefrompng($filename);
imagealphablending($throwAway, false);
imagesavealpha($throwAway, true);
$dstImage = imagecreatetruecolor(imagesx($throwAway), imagesy($throwAway));
imagecopyresampled($dstImage, $throwAway,0,0,0,0, imagesx($throwAway), imagesy($throwAway), imagesx($throwAway), imagesy($throwAway));
Run Code Online (Sandbox Code Playgroud)
,它应该将PNG转换为"真彩色"图像并保持透明度.它确实似乎这样做了,但现在我看到的只是黑色背景上的蓝色.
我该怎么办?!
我的最终目标是为我的研究小组运行一个twiki网站.
我在运行Apache等的RedHat服务器上有空间,但我没有root权限.由于我无法使用当前权限安装perl模块,因此我决定手动安装本地版本的perl.工作没问题.要使twiki工作,需要以下模块:
我安装了FreezeThaw,CGI,Error,它在GD上失败,出现以下错误:
UNRECOVERABLE ERROR无法在搜索路径中找到gdlib-config.
请安装libgd 2.0.28或更高版本.如果你想尝试
无论如何编译,请使用选项--ignore_missing_gd重新运行此脚本.
在寻找如何绕过这个最新的障碍时,我发现了一个先前的问题:如何安装带有Strawberry Perl的GD库,询问安装这个问题,并建议手动编译 gdlib.但是,您会注意到该链接已损坏.基本站点:http://www.libgd.org/基本上是说要去项目的bitbucket页面.
所以我从该页面获得了tarball并且正在尝试安装它.按照说明进行操作时会出现以下问题.README.TXT说:"如果已从CVS获取源,请运行bootstrap.sh [options]."
运行bootstrap.sh会产生:
configure.ac:64:警告:在库中找不到宏`AM_ICONV'
configure.ac:10:必需的目录./config不存在cp:不能
创建常规文件`config/config.guess':没有这样的文件或目录
configure.ac:11:安装`config/config.guess'configure.ac:11:
复制cp时出错:无法创建常规文件
`config/config.sub':没有这样的文件或目录configure.ac:11:
安装`config/config.sub'configure.ac:11:错误
复制cp:无法创建常规文件`config/install-sh':没有这样的
文件或目录configure.ac:28:安装`config/install-sh'
configure.ac:28:复制cp时出错:无法创建常规
文件`config/missing':没有这样的文件或目录configure.ac:28:
安装`config/missing'configure.ac:28:复制时出错
configure.ac:577:找不到所需的文件`config/Makefile.in'
configure.ac:577:找不到所需的文件`config/gdlib-config.in'
configure.ac:577:找不到所需的文件`test/Makefile.in'
Makefile.am:14:使用了Libtool库但是'LIBTOOL'未定义
Makefile.am:14:定义`LIBTOOL'的常用方法是添加
AC_PROG_LIBTOOL' Makefile.am:14: toconfigure.ac'并运行
aclocal' andautoconf'再次.Makefile.am:14:如果`AC_PROG_LIBTOOL'在`configure.ac'中,确保Makefile.am:14:它的定义是在
aclocal的搜索路径.cp:无法创建常规文件
`config/depcomp':没有这样的文件或目录Makefile.am:安装
`config/depcomp'Makefile.am:复制失败时出错
它说我还应该安装以下第三方库:
zlib,可从http://www.gzip.org/zlib/获得 数据压缩库 …
我正在尝试全屏截图并将其保存为png.我在这里找到了一个代码并对其进行了一些修改.对于屏幕截图,我使用openGL和Glut以及在png中保存c的gd库.我得到的只是一个黑色的png,我无法弄清楚为什么.我在stackoverflow中搜索并发现了一些帖子,但不幸的是他们没有帮助.其中一个是使用glReadBuffer(GL_FRONT); 而不是glReadBuffer(GL_BACK); 我尝试了两个都没有成功.这是我的代码:
int SVimage2file(char *filename){
int width = glutGet(GLUT_SCREEN_WIDTH);
int height = glutGet( GLUT_SCREEN_HEIGHT);
FILE *png;
GLubyte *OpenGLimage, *p;
gdImagePtr image;
unsigned int r, g, b;
int i,j,rgb;
png = fopen(filename, "wb");
if (png == NULL) {
printf("*** warning: unable to write to %s\n",filename);
return 1;
}
OpenGLimage = (GLubyte *) malloc(width * height * sizeof(GLubyte) * 3);
if(OpenGLimage == NULL){
printf("error allocating image:%s\n",filename);
exit(1);
}
printf("Saving to: %s .\n",filename);
glPixelStorei(GL_PACK_ALIGNMENT, 1);
glReadBuffer( GL_FRONT);
glReadPixels(0, 0, width, …Run Code Online (Sandbox Code Playgroud) 我正在尝试比较php中的形状.我有一个包含大量图像的数据库,在这些图像中有一个形状(大部分位于图像的中心).现在我想将这些图像与Shape进行比较.
输入是一个形状(png),其大小与数据库中的图像完全相同.
我做了一个函数,它采用了形状的颜色并将其变为黑色(背景为白色)
我可以比较图像中的每个像素并跟踪多少黑色像素是相同的,但这将需要大量的CPU,我认为它不会每次都有效.
我也可以使用像python这样的另一种语言,但我真的想在PHP中解决这个问题.有没有人有想法以实际的方式做到这一点?
问题" 比较php中的2个图像 "中的anwser与我期望的不同.我需要比较图像的一部分(在示例中是白色的背景,但可能是背景中有一些噪点)
我用GD库创建了"Text on Image".我面临一个问题,即传递一些古吉拉特语文本,但输出错误如下:
我想要这样
得到:
我的代码是:
$textBox = imagettfbbox($fontSize, $angle, $font, $txt);
$textWidth = abs(max($textBox[2], $textBox[5]));
$textHeight = abs(max($textBox[5], $textBox[7]));
$x = (imagesx($this->img) - $textWidth)/2;
$y = ((imagesy($this->img) + $textHeight)/$h)-($lines-2)*$textHeight;
$lines = $lines-1;
// Added this line from SO answer.
$txt = mb_convert_encoding($txt, "HTML-ENTITIES", "UTF-8");
$txt = preg_replace('~^(&([a-zA-Z0-9]);)~', htmlentities('${1}'), $txt);
//add some shadow to the text
imagettftext($this->img, $fontSize, $angle, $x + 2, $y + 1, $white, $font, $txt);
//add the text
imagettftext($this->img, $fontSize, $angle, $x, $y, $maroon, $font, …Run Code Online (Sandbox Code Playgroud) 打电话给所有PHP大师!
我知道您可以使用getimagesize()来获取PHP中图像的实际像素高度和宽度.但是,如果您在Photoshop中打开图像并查看图像大小对话框,您会注意到有一个分辨率值决定了图像的打印尺寸.
给定一个任意的jpg图像文件,我需要使用PHP来确定这个分辨率.看来这个信息存储在某个地方的jpg文件中,所以我该怎么做呢?
另一个要求 - 我只有gdlib可供我使用.我需要在不使用其他php库的情况下执行此操作(imagemagick等)
谢谢您的帮助!
我正在编写一个脚本,它将从用户输入上传文件,将其大小调整为缩略图,并将两个新文件名添加到数据库中.
但是,我不能为我的生活弄清楚如何让PHP检测图像的MIME类型,然后将其提供给标题.这是代码,我已经发表评论,试图让它尽可能清晰:
$picture = $_FILES['picture']['name'];
/*original file location*/
$file = 'picture/'.$picture.'';
/*save thumbnail location*/
$save = 'thumb/tn-'.$picture.'';
/*append thumbnail filename with tn-*/
$thumb = 'tn-'.$picture.'';
/*get original file size*/
list($width, $height) = getimagesize($file);
/*get image MIME type*/
$size = getimagesize($file);
$fp = fopen($file, "r");
if ($size && $fp)
{
header("Content-type:".$size['mime']);
fpassthru($fp);
exit;
}
else
{
echo 'Error getting filetype.';
}
/*define thumbnail dimensions*/
$modwidth = 300;
$modheight = 200;
/*check to see if original file is not too small*/
if …Run Code Online (Sandbox Code Playgroud) gdlib ×10
php ×8
colors ×2
png ×2
c ×1
gd ×1
grayscale ×1
image-text ×1
imagemagick ×1
mime-types ×1
opengl ×1
perl ×1
redhat ×1
rgb ×1
thumbnails ×1
transparency ×1
twiki ×1
utf-8 ×1