为什么我创建的缩略图的文件大小比原始图像大?

max*_*max 4 php google-maps image

我想将 Google 地图图像保存到我的服务器。下面是我用来获取和保存这些图像的代码,以及用于创建缩略图的代码。我为此使用 CodeIgniter。

//saving original image on server
$post = $_POST;
$file = file_get_contents("http://maps.google.com/maps/api/staticmap?size=".$post['w']."x".$post['h']."&sensor=false&markers=color:red|size:mid|".$post['lt'].",".$post['lg']."&&zoom=".$post['z']);

$filename = 'map_'.uniqid().'.png';
$name     = './assets/images/upload/'.$filename;
file_put_contents($name, $file);

// creating thumbnail 
$config_manip = array(
    'image_library' => 'gd2',
    'source_image' => './assets/images/upload/'.$filename,
    'new_image' => './assets/images/upload/thumb_'.$filename,
    'maintain_ratio' => false,
    'quality' => "10%",
    'width' => 480,
    'height' => 480 
);

$this->load->library('image_lib', $config_manip);
$this->image_lib->resize();
Run Code Online (Sandbox Code Playgroud)

我的问题是生成的缩略图的尺寸比原始图像大得多。用于比较:

为什么缩略图比原图大?

Mar*_*ell 5

主要区别在于您的原始图像包含调色板,而缩略图则不包含。因此,缩略图不必为每个像素存储 8 位索引到调色板中,而是必须为每个像素存储 3 个 8 位真颜色。您需要一种方法来强制使用调色板缩略图 - 即在输出之前使用imagecreate()而不是imagecreatetruecolor()或调用。imagetruecolortopalette()

下面是对每个文件的分析:

在此输入图像描述

根据您选择包含在调色板中的颜色数量,您将获得不同的文件大小,如下所示:

Colours    Filesize (bytes)
=======    ================
10          3,380
16         12,199
32         12,415
64         36,581
128        36,825
256        42,013
Run Code Online (Sandbox Code Playgroud)