Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php ImageCopy有时会重新采样以创建空白图像_Php_Image Processing_Image Manipulation - Fatal编程技术网

Php ImageCopy有时会重新采样以创建空白图像

Php ImageCopy有时会重新采样以创建空白图像,php,image-processing,image-manipulation,Php,Image Processing,Image Manipulation,我正在使用以下工具调整图像的大小: //load file and dimensions $obj_original_image = imagecreatefromjpeg($str_file_path); list($int_width, $int_height, $image_type) = getimagesize($str_file_path); //compress file $int_thumbnail_width = 320; $int_ratio = $int_thumbnai

我正在使用以下工具调整图像的大小:

//load file and dimensions
$obj_original_image = imagecreatefromjpeg($str_file_path);
list($int_width, $int_height, $image_type) = getimagesize($str_file_path);

//compress file
$int_thumbnail_width = 320;
$int_ratio = $int_thumbnail_width / $int_width;
$int_new_width = $int_thumbnail_width;
$int_new_height = $int_height * $int_ratio;

$obj_image = imagecreatetruecolor($int_new_width, $int_new_height);
imagecopyresampled($obj_image, $obj_original_image, 0, 0, 0, 0, $int_new_width,     $int_new_height, $int_width, $int_height);
imagejpeg($obj_image, $GLOBALS['serverpath'] . '/images/uploaded/video-thumbs/'.$arr_data['thumbnail_folder'].'/' . $arr_data['id']. '.jpg', $int_compression = 85);
这通常是完美的。然而,它偶尔会产生一个空白的白色图像。我已在以下网址阅读本说明:

由于调色板图像限制255+1颜色,出现问题。重采样或过滤图像通常需要超过255种颜色,一种近似方法用于计算新重采样像素及其颜色。对于调色板图像,我们尝试分配一种新颜色,如果分配失败,我们将选择理论上最接近的计算颜色。这并不总是最接近的视觉颜色。这可能会产生一个奇怪的结果,比如空白或视觉上空白的图像。若要跳过此问题,请使用truecolor图像作为目标图像,例如由imagecreatetruecolor创建的图像


但是,我已经在使用ImageCreateTureColor。我总是缩放相同大小的图像,这样就不会出现宽度/高度问题。这只是偶尔发生的,大多数情况下,图像缩放工作正常。有关如何解决此问题的任何想法?

当您已经使用imagecreatefromjpeg打开图像时,没有理由使用getimagesize。您可以使用imagesx和imagesy来获取宽度/高度。getimagesize与GD分离,将重新打开图像,重新解析图像,等等

还要注意的是,GD非常愚蠢,它迫使您确定您拥有的图像类型,并调用相应的createfrom函数。如果尝试打开除.jpg图像以外的任何内容,imagecreatefromjpeg将失败

$obj_original_image = imagecreatefromjpeg($str_file_path);
if ($obj_original_image === FALSE) {
   die("Unable to load $str_file_path. Not a jpg?");
}

etc... etc...

$status = imagecopyresampled($obj_image, $obj_original_image, 0, 0, 0, 0, $int_new_width,     $int_new_height, $int_width, $int_height);

if ($status === FALSE) {
    die("imagecopyresampled failed!");
}

另外,在高度/宽度计算中添加一些调试-输出生成的值。可能其中一个或多个显示为0,因此您最终将重新采样到不存在的大小。

您提到正在处理的图像大小始终相同,但分辨率是否始终相同?根据我的经验,如果你正在处理一个特别高分辨率的图像,你可能会因为某些操作而耗尽内存,从而产生一个空白的白色图像。如果是这种情况,您可以尝试通过在memory_limit参数下增加PHP.ini中分配给PHP的内存量来修复它。据我所知,该值适用于图像处理。

谢谢Marc B,这是获取文件上的坐标和有效点(jpg)以及宽度和高度的好技巧。我知道它始终是jpg,因为我刚刚将原始网络摄像头图像捕获保存为jpg,然后再调整大小。谢谢,文件大小会有所不同,因为它是从网络摄像头捕获的,虽然我认为应该是相同的分辨率。虽然我已经将内存限制设置为128M,但它可能会耗尽内存,所以我怀疑原始jpg是否在80kb左右。虽然在文件中,而不是在php.ini中,我的内存限制增加了一倍,ini_setmemory_limit为256M,希望这能有所帮助。我现在还保存了原始的jpg图像,而不仅仅是大小调整后的图像,因此如果这种情况再次发生,我会保存导致问题的原始文件,然后可以正确地测试它。