在创建大量DOM元素时,document.createElement和朋友可以添加大量的字节和丑陋.我知道我可以创建自己的子程序,或使用innerHTML或其他什么,但为什么我不能这样做:
var $c = document.createElement;
var newP = $c('p');
Run Code Online (Sandbox Code Playgroud)
Firebug抱怨这条消息:
"Illegal operation on WrappedNative prototype object" nsresult: "0x8057000c (NS_ERROR_XPC_BAD_OP_ON_WN_PROTO)"
Run Code Online (Sandbox Code Playgroud)
显然,我做了一些不允许的事情.为什么不呢?它允许其他东西,例如Array.splice或Math.min.
我正在接收使用 Ajax 上传到我的 PHP 脚本中的文件(图像),并使用以下命令让它工作:
$input = fopen("php://input", "r");
file_put_contents('image.jpg', $input);
Run Code Online (Sandbox Code Playgroud)
显然我会在此操作之前清理输入。
我想检查的一件事是创建新文件之前的文件大小,如下所示:
$input = fopen("php://input", "r");
$temp = tmpfile();
$realsize = stream_copy_to_stream($input, $temp);
if ($realsize === $_SERVER["CONTENT_LENGTH"]) {
file_put_contents('image.jpg', $temp);
}
Run Code Online (Sandbox Code Playgroud)
但这是行不通的。文件已创建,但大小为 0 字节,因此内容未放入文件中。我对使用流不太熟悉,但我不明白为什么这不起作用,所以我向你寻求帮助。提前致谢!
我正在使用我编写的简单缩略图脚本,它非常标准:
$imgbuffer = imagecreatetruecolor($thumbwidth, $thumbheight);
switch($type) {
case 1: $image = imagecreatefromgif($img); break;
case 2: $image = imagecreatefromjpeg($img); break;
case 3: $image = imagecreatefrompng($img); break;
case 6: $image = imagecreatefrombmp($img); break;
case 15: $image = imagecreatefromwbmp($img); break;
default: return log_error("Tried to create thumbnail from $img: not a valid image");
}
imagecopyresampled($imgbuffer, $image, 0, 0, 0, 0, $thumbwidth, $thumbheight, $width, $height);
$output = imagepng($imgbuffer, "$album/thumbs/$imgname.png", 9);
Run Code Online (Sandbox Code Playgroud)
9是最低质量的设置,但是从400 x 600 JPEG图像(56kB)我得到一个27 kB的缩略图(140 x 140).使用imagejpeg(质量为80)而不是imagepng它大约是4kB.
这怎么可能,特别是在imagepng的最低质量设置?我尝试使用imagecopy而不是imagecopyresampled,并尝试使用imagecreate而不是真正的颜色版本.不幸的是,图像以某种方式出现了损坏.
是否有任何方法可以获得相当小的文件大小的PNG缩略图(大约4 kB,140 x 140)?或者我必须使用JPEG?