Я принял несколько иной подход к проблеме, сталкиваясь с проблемами один или два раза раньше. Далее создается новое прозрачное изображение PNG, на которое мы добавляем QR-код и логотип.
<?php
/*
to output directly to the browser set as false,
to save set as true
*/
$save=false;
$filepath='c:/wwwroot/images/qrcodes/4e9550be3c5ce4649ef00a70c9d6fb92bda09752.png';
$logopath='c:/wwwroot/images/ict_cmyk_jigsaw_1.png';
$source = imagecreatefrompng( $filepath ); # QR-Code
$logo = imagecreatefrompng( $logopath ); # Overlay
$sw = intval( imagesx( $source ) );
$sh = intval( imagesy( $source ) );
$lw = intval( imagesx( $logo ) );
$lh = intval( imagesy( $logo ) );
/* Create a new image onto which we will copy images & assign transparency */
$target = imagecreatetruecolor( $sw, $sh );
imagesavealpha( $target , true );
/* common divisor for overlay image size calculations */
$divisor = 3;
/* image size calculations */
$clw = $sw / $divisor; # calculated width
$scale = $lw / $clw; # calculated ratio
$clh = $lh / $scale; # calculated height
/* allocate a transparent colour for the new image */
$transparent = imagecolorallocatealpha( $target, 0, 0, 0, 127 );
imagefill( $target,0, 0, $transparent );
/* copy the QR-Code to the new image */
imagecopy( $target, $source, 0, 0, 0, 0, $sw, $sh );
/* Determine position of overlay image using divisor */
$px=$sw/$divisor;
$py=$sh/$divisor;
/* add the overlay */
imagecopyresampled( $target, $logo, $px, $py, 0, 0, $clw, $clh, $lw, $lh );
/* output or save image */
header( 'Content-Type: image/png' );
imagepng( $target, $save ? $filepath : null );
/* clean up */
imagedestroy( $target );
imagedestroy( $source );
imagedestroy( $logo );
?>
Исходный QR-код
Исходный прозрачный логотип
Результат