How to update an image field from code

Don't complicate it: use Web Service API

require_once 'include/Webservices/Revise.php';
 
require_once 'include/tcpdf/tcpdf_barcodes_2d.php';
require_once 'include/tcpdf/tcpdf_barcodes_1d.php';
$barcodeobj = new TCPDF2DBarcode('http://www.tcpdf.org', 'QRCODE,H');
//$barcodeobj = new TCPDFBarcode('http://www.tcpdf.org', 'bar_codes');
 
// export as PNG image
$data = $barcodeobj->getBarcodePngData(3, 3, array(0,128,0));
 
$model_filename=array(
	'name'=>'barcode',  // no slash nor paths in the name
	'size'=>strlen($data),
	'type'=>'image/png',
	'content'=>base64_encode($data)
);
 
$assetData  = array(
	'attachments' => array(
		'cf_1114' => $model_filename,
	),
	'id'=> '29x4062',
);
vtws_revise($assetData, $current_user);

Now, if you need to do this from inside a workflow task you could run into a loop because vtws_revise will actually launch the workflows again. In this case setup the environment for a direct file upload and call insertIntoAttachment like this:

require_once 'include/tcpdf/tcpdf_barcodes_2d.php';
require_once 'include/tcpdf/tcpdf_barcodes_1d.php';
$barcodeobj = new TCPDF2DBarcode('http://www.tcpdf.org', 'QRCODE,H');
//$barcodeobj = new TCPDFBarcode('http://www.tcpdf.org', 'bar_codes');
 
// export as PNG image
$data = $barcodeobj->getBarcodePngData(3, 3, array(0,128,0));
$attachment_name = 'BARCODEname.png';
$filepath = $root_directory.'cache/'.$attachment_name;
file_put_contents($filepath, $data);
$_FILES['cf_1114'] = array(
	'name' => $attachment_name,
	'type' => 'image/png',
	'tmp_name' => $filepath,
	'error' => 0,
	'size' => strlen($data),
);
$a = CRMEntity::getInstance('Assets');
$a->id = 4062;
$a->mode = 'edit';
$a->DirectImageFieldValues['cf_1114'] = $attachment_name; // this is to delete previous image with the same name
$a->retrieve_entity_info(4062, 'Assets');
$a->insertIntoAttachment(4062, 'Assets');
unlink($filepath);

coreBOS Documentación