Cześć,
Mam problem z Imagick w php. Podczas generowania obrazów powstają na nich artefakty.
W skrócie, jest tworzone płótno, na które są nakładane obrazki jeden obok drugiego. Po zapisie płótna. Widać na nim artefakty. Efekt ten jest losowy. Czasami pojawia się czarna linia na samej górze, a czasami szum przez środek obrazka. Po pierwszym przebiegu np obrazek 1_0 jest wygenerowany poprawnie, a po drugim już zawiera defekty.
// $files - list obiektów przechowująca ścieżkę do pliku obrazu
// $this->formName - plik wyjściowy obrazu
private function generateImg($files)
{
$currentW = 0;
$formImg = new Imagick();
$formImg->newImage(450, 280, $this->pixel, 'png');
$formImg->setImageAlphaChannel(Imagick::ALPHACHANNEL_ACTIVATE);
$formImg->floodFillPaintImage('#FFFFFFFF', 10, '#FFFFFF', 0, 0, false);
$index = 1;
foreach ($files as $file) {
echo '.';
$phaseImg = new Imagick();
echo "File:{$file->getPath()}\n";
$phaseImg->readImage($file->getPath());
$phaseImg->setImageAlphaChannel(Imagick::ALPHACHANNEL_ACTIVATE);
$phaseImg->floodFillPaintImage('#FFFFFFFF', 10, '#FFFFFF', 0, 0, false);
$formImg->compositeImage($phaseImg, Imagick::COMPOSITE_MATHEMATICS, $currentW, 0);
$currentW += $phaseImg->getImageWidth();
$phaseImg->writeImage("./sample/debug_{$this->formName}_{$index}.png");
$phaseImg->clear();
$phaseImg->destroy();
$index++;
}
$path = "./out/{$this->formName}.png";
$formImg->writeImage($path);
$formImg->clear();
$formImg->destroy();
gc_collect_cycles();
echo "\n";
}
W załączniku przykład defektów.
Czy ktoś spotkał się z podobnym problemem i zna rozwiązanie?
PHP 7.3.2 x64 TS