草庐IT

PHP gd 库说明

coder 2024-04-29 原文

我正在查看这段代码并浏览了文档,但仍然不明白它应该如何工作。代码工作正常,但我想知道我是否应该将 header 输出为 png 而不是 jpeg。

这段代码到底发生了什么? png图像是否转换为jpeg?

我最终想要做的是在单个目录中为所有 gif、jpg、bmp 和 png 图像添加水印。我正在输出所有标题,无论图像类型是 jpg。这个对吗?我希望我说得有道理,我有点累了。

$im2 = imagecreatefrompng($image)
imagecopy() and more code here
header("Content-Type: image/jpeg");
imagejpeg($im2,'',50);

最佳答案

您的代码大致如下:

// Load the PNG file from disk into memory
$im2 = imagecreatefrompng($image) 

$im2现在是 resource , 引用图像。一旦进入内存,它就不是 png 或 jpeg;它是原始的、未压缩的数据。图像的“格式”指定了原始数据是如何打包和格式化的;此时,它 没有这样的格式。它只是内存中的数据。

// Some code which works with the image in memory, adding your watermark?
imagecopy() and more code here

// Tell the browser that we're output a JPG
header("Content-Type: image/jpeg");

如果您请求一个 jpg(即 http://host.com/image.jpg),那么服务器会负责为您编写此 header 。如果您通过 PHP 即时制作 JPG,则必须手动输出标题。否则,PHP 假定您正在编写 HTML 并在通过 echo 向标准输出写入任何内容后立即为您输出适当的 header 。或者只是在 <?php ?> 之外添加文本/空格标签。

// compress as a jpeg, and send to browser
imagejpeg($im2,'',50);

imagejpeg获取原始图像,将其压缩为 jpg,并将其写入文件(如果给它一个文件名)或标准输出(将其发送到浏览器)。从技术上讲,要输出到浏览器,第二个参数应该是 null , 不是 '' .最后一个参数 50 以百分比形式指定 jpeg 质量。 100 为高质量,0 为低质量。

关于PHP gd 库说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2185013/

有关PHP gd 库说明的更多相关文章

  1. spring.profiles.active和spring.profiles.include的使用及区别说明 - 2

    转自:spring.profiles.active和spring.profiles.include的使用及区别说明下文笔者讲述spring.profiles.active和spring.profiles.include的区别简介说明,如下所示我们都知道,在日常开发中,开发|测试|生产环境都拥有不同的配置信息如:jdbc地址、ip、端口等此时为了避免每次都修改全部信息,我们则可以采用以上的属性处理此类异常spring.profiles.active属性例:配置文件,可使用以下方式定义application-${profile}.properties开发环境配置文件:application-dev

  2. ruby-on-rails - ActiveRecord:除非另有说明,否则在保存之前使所有文本字段都调用 strip - 2

    多年来,我在各种网站上遇到过各种问题,用户在字符串和文本字段的开头/结尾放置空格。有时这些会导致格式/布局问题,有时会导致搜索问题(即搜索顺序看起来不对,但实际上并非如此),有时它们实际上会使应用程序崩溃。我认为这会很有用,而不是像我过去所做的那样放入一堆before_save回调,向ActiveRecord添加一些功能以在保存之前自动调用任何字符串/文本字段上的.strip,除非我告诉它不是,例如do_not_strip:field_x,:field_y或类定义顶部的类似内容。在我去弄清楚如何做到这一点之前,有没有人看到更好的解决方案?明确一点,我已经知道我可以做到这一点:befor

  3. ruby - 如何从 Chef 说明书中的库访问当前节点? - 2

    我正在尝试为ChefRecipe编写一个库,以简化一些常见的搜索。例如,我希望能够在cookbook/libraries/library.rb中执行类似的操作,然后从同一Recipe中的Recipe中使用它:moduleExampledefself.search_attribute(attribute_name)returnsearch(:nodes,node[attribute_name])endend问题是,在Chef库文件中,node对象或search函数都不可用。似乎可以使用Chef::Search::Query.new().search(...)进行搜索,但我找不到任何可以访

  4. ruby - 关于 Ruby << 运算符的说明 - 2

    我对Ruby很陌生,想知道运算符(operator)。当我用谷歌搜索这个运算符时,它说它是一个二进制左移运算符,给出了这个例子:awillgive15whichis11110000然而,它在这段代码中似乎不是“二进制左移运算符”:classTextCompressorattr_reader:unique,:indexdefinitialize(text)@unique=[]@index=[]add_text(text)enddefadd_text(text)words=text.splitwords.each{|word|doadd_word(word)}enddefadd_word(

  5. ruby - 带格式说明符的命名格式字符串参数 - 2

    在Ruby中,您可以使用String#%将参数替换为C风格的格式字符串方法,像这样:'%.3dcanbeexpressedinbinaryas%b'%[30,30]#=>"030canbeexpressedinbinaryas11110"Kernel#sprintf和Kernel#format行为相似:sprintf('%.3dcanbeexpressedinbinaryas%b',30,30)#=>"030canbeexpressedinbinaryas11110"format('%.3dcanbeexpressedinbinaryas%b',30,30)#=>"030canbeex

  6. H3CIE A套需求说明 - 2

    实验配置:点击跳转组网需求:总部网络由两台路由器r1r2和三台交换机sw1sw2sw3组成,其中r1作为企业所有分支二节点广域网接入路由器,r2作为企业所有分支一节点广域网接入路由器,sw1sw2sw3组成总部局域网核心,路由器r5和交换机sw4用来模拟企业的一个分支一节点网络,路由器r3和r4分别用来模拟企业的两个分支二节点网络,sw5用来模拟互联网。分支一节点通过一条2M的线路(背对背专线模拟)和总部相连接,分支二节点采用greoveripsec的方式跨越互联网接入总部网络整个企业应用分为两种业务,A流和B流AB两种业务,各个分支节点都可以和总部互通,A流的分之二节点之间,以及分支一和分之

  7. DRV8825步进电机驱动详细说明书————含接线图 - 2

    最近玩步进电机时候,发现步进电机驱动种类多;A4988,drv8825,tb6600,lv8731……;tb6600驱动电流可达4A,1600细分,十分强大,但是体积大,用在平衡车上不太合适。drv8825加散热器驱动电流可达2.5A,32细分,还不错。芯片介绍这里的介绍只介绍其引脚连接。如图是它的说明书中对引脚的解释在这里把它翻译成中文。  为了方便大家使用,说明书还给出了一种典型的连接方式 这样初始化好之后,将AOUT1、AOUT2、BOUT1、BOUT2分别连接到步进电机对应信号线,AOUT1与AOUT2同相,BOUT1与BOUT2同相。判断步进电机信号线是否同相的一个方法是将其中两条接

  8. Ruby mixin 覆盖方法说明 - 2

    我刚刚遇到了这种我不太理解的行为。moduleMdeffoo"module_foo"endendclassCdeffoo"class_foo"endincludeMendputsC.new.foo为什么C.new.foo实际上返回class_foo?我非常确定该方法应该被模块中的方法覆盖。另一件事,将"class_foo"替换为super会使C.new.foo返回`"module_foo"这实际上看起来像是在定义类实例方法之前以某种方式包含了模块。你能解释一下吗? 最佳答案 来自ProgrammingRuby关于mixin的部分:I

  9. ruby - 如何在 IDE(如 Eclipse)中开发和调试 Chef 说明书和 Recipe ? - 2

    我是ruby​​和Chef的新手。我一直在开发Recipe,提交它们,将它们上传到Chef服务器,然后通过角色更改将它们部署到Chef客户端,然后在客户端上运行“chef-client”。这个过程很慢。我如何使用IDE(在我的例子中是Eclipse)开发Recipe并能够调试(设置断点、观察变量等)并运行它们,而无需将它们上传到Chef服务器,然后使用Chef-客户运行?我将Eclipse3.7Indigo与“动态语言工具包-Ruby开发工具3.0.0.v20110424-7Z--E_EkMYXO4k101442”插件一起使用我正在使用10.xChef代码行开发OpscodeChef说

  10. ruby-on-rails - Gemfile 中的 "~> 4.0.1"、 "4.0.1"和无版本说明符有什么区别? - 2

    这个问题在这里已经有了答案:Meaningoftilde-greater-than(~>)inversionrequirement?(4个答案)关闭8年前。在RailsGemfile中,它们之间有什么区别:gem"gemname","~>4.0.1"和gem"gemname","4.0.1"和gem"gemname"还有应该在什么地方使用什么以及遵循这种方式的好处?

随机推荐