这是我的代码的模型,而不是完整的代码...但足以提出以下问题:
当我创建一个imagemagick对象的克隆时,我是否必须清除并销毁该对象,或者只是第一个。换句话说,在我的模型代码中,我是否还需要在foreach循环中销毁 $ clone ,或者在循环外部 $ im ,或者两者兼而有之?
由于
function create_clone($size, $filename, $filepath)
{
$thumb = array();
$dir = get_dir($filename); //validate directory to write clones
if (isset($dir)) {
$im = new imagick($filepath);
//create sizes of same image
foreach ($size as $value) {
$clone = $im->clone();
//create clone
}
$im->clear();
$im->destroy();
}
return $thumb;
}
答案 0 :(得分:0)
Imagick::clear()和Imagick::destroy()变换了相同的ClearMagickWand方法,因此您只需调用一个即可释放已分配的资源。您需要清除或销毁foreach
循环中的每个克隆对象。这是因为克隆只会制作对象的精确副本。清除原始资源不会释放分配给另一个对象的相同资源。
$im = new imagick($filepath);
foreach ($size as $value) {
$clone = $im->clone();
// Do work
$clone->clear();
}
$im->clear();
此外,您应该使用clone
关键字作为method has been deprecated。
<?php
// Initialize image object
$img = new Imagick($resource);
// Exact copy of object + data resources
$imgCopy = clone $img;
// Compare resource of two objects
var_dump($img->getImageBlob() === $imgCopy->getImageBlob());
//=> bool(true)
// Free original object
$img->destroy();
// Verify original object is empty
var_dump($img->getImageBlob());
//=> Warning: Uncaught exception 'ImagickException' with message 'Can not process empty Imagick object'
// Verify copied object's resources are still allocated
var_dump($imgCopy->getImageBlob());
//=> string(342) "?PNG\r\n\032\n\000\000\000\rIHDR .... IEND?B`?"