在PHP GD中,PNG_ALL_FILTERS做什么和与png图像的“自适应过滤”有什么关系?
在php中,imagepngGD库中的函数具有用于过滤器的参数。关于过滤器类型常量的文档仅允许这些常量表示的“显示”:
一种特殊的PNG过滤器,由imagepng()函数使用
确实非常有帮助。
SO上的这个答案可以提供更多信息,但是缺少有关常量的信息PNG_ALL_FILTERS。对我来说,其他过滤器似乎是互斥的,那么“全部”怎么办?
在搜索中,我发现对于png过滤,一种好的策略(在某些情况下)将是为每条扫描线分别选择最佳过滤器,称为“自适应过滤”。
考虑到上述情况,我猜想该PNG_ALL_FILTERS选项可以实现“自适应过滤” 。我猜对了吗?如果没有,什么也 PNG_ALL_FILTERS办?我可以让GD从php进行自适应过滤吗?
非常感谢!
我想知道哪一个是正确的运行js代码,根据窗口高度计算垂直菜单的高度,并按时,不迟到,不早.
我正在使用,document.ready但它并没有真正帮助我解决这个问题,它有时不设置,我必须重新加载页面,然后它正在工作,但不是第一次加载.
如何解决这个问题呢?
这是我的代码:
$(document).ready(function(){
var winh = document.body.clientHeight;
var footer = document.getElementById('footer').offsetHeight;
document.getElementById('sidebar').style.height = winh - 5/2*footer + 'px';
document.getElementById('sidebar').style.marginBottom = footer + 'px';
$(window).resize(function(){
var winh = document.body.clientHeight;
var footer = document.getElementById('footer').offsetHeight;
document.getElementById('sidebar').style.height = winh - 5/2*footer + 'px';
document.getElementById('sidebar').style.marginBottom = footer + 'px';
});
});
Run Code Online (Sandbox Code Playgroud) 我在这个 SO Q&A中找到了关于如何检查变量是否存在的详细参考。
提到要检查一个类是否具有某个属性,可以使用(如 php.net 中所述):
$check = property_exists('MyClass', 'property_name');
Run Code Online (Sandbox Code Playgroud)
另外,对于“定义”的“常量”,可以使用:
$check = defined('MY_CONSTANT');
Run Code Online (Sandbox Code Playgroud)
问题:const班级里的a怎么样?
详细说明...我有一个在多个项目中使用的类(最小示例):
class ProjectSettings {
const MY_CONSTANT = 'my constant';
}
Run Code Online (Sandbox Code Playgroud)
我正在编写一个新功能,它需要“项目设置”,但如果该设置在类中不存在,则应应用默认值。
请注意,同一个类在多个项目中使用(具有不同的值)。在所有现有项目中实施这个新的常量将会很麻烦。但是,新功能位于现有脚本中,我可以使用此新版本更新旧项目,而无需更新 ProjectSettings 类(例如,如果甚至没有使用此新功能)。这就是为什么我想使用特征检测。
我在想:
if (defined(ProjectSettings::MY_CONSTANT)) {
$setting = ProjectSettings::MY_CONSTANT;
} else {
$setting = 'some default value';
}
Run Code Online (Sandbox Code Playgroud)
然而,我徒劳的尝试导致:
var_dump(ProjectSettings::MY_CONSTANT);
// string(11) "my constant"
// (as expected)
var_dump(ProjectSettings::MY_OTHER);
// generates a PHP Fatal error
var_dump(defined(ProjectSettings::MY_CONSTANT));
// bool(false)
// (it exists, but is not 'defined', oh well...)
var_dump(defined(ProjectSettings::MY_OTHER));
// …Run Code Online (Sandbox Code Playgroud) 现在使用新的PHP 7.0.0,我有点担心所谓的"变量变量"的评估顺序的变化.
在此页面的 "对变量处理的更改"下,将显示一个表,其中包含表达式示例及其处理顺序,在PHP 5和PHP 7中.列出的四个表达式为:
$$foo['bar']['baz']
$foo->$bar['baz']
$foo->$bar['baz']()
Foo::$bar['baz']()
Run Code Online (Sandbox Code Playgroud)
给定以下字符串和数组:
$qux = 'quux';
$foo = array('bar' => array('baz' => 'qux'));
Run Code Online (Sandbox Code Playgroud)
表中的第一个表达式在$$foo['bar']['baz']PHP 5 中被解释为一个名为value in的变量的值$foo['bar']['baz'],因此值为$qux,即 'quux'.
但是,在PHP 7中,正如我所理解的那样,同一个表达式将被解释为一个名为value in的变量$foo,因此我希望PHP注意'数组到字符串转换',因为它$foo是一个数组.
表中的其他示例似乎是同一主题的变体.
当然,我很好奇为什么在PHP 7中改变了这一点(具体来说,为什么这种改变比向后兼容更重要),然而,这对SO来说不是一个合适的问题.我的问题更实用:
应对这种不兼容性的推荐方法是什么?
当然,加入大括号违规表达式将有助于(${$foo['bar']['baz']},$foo->{$bar['baz']},$foo->{$bar['baz']}()和Foo::{$bar['baz']}()),但是这是非常麻烦的,经历吨的旧代码,寻找相对较少occurances ...
否则,这四个示例是唯一可能的语法变体吗?也就是说,我可以创建一个RegExp和grep所有违规代码吗?可能存在哪些其他变化?