In case you use default un-normalized getColor value the alpha value will always be either 0 or 1.
If you want to use real full-range 0-1 alpha channel on your 24bit transparent images use the alpha value from the normalized one, even if you use the rest of unnormalized data.
To copy a 24bit png with real alpha transparency, you would have to do this:
<?php
$im=new Imagick( 'image.png' );
$iterator=$im->getPixelIterator();
foreach ($iterator as $row=>$pixels) {
foreach ( $pixels as $column => $pixel ){
$un_color=$pixel->getColor(); //unnormalized color
$nor_color=$pixel->getColor(true); //normalized color
$pixel->setColor('rgba('.$un_color['r'].','.$un_color['g'].','.$un_color['b'].','.$nor_color['a'].')');
}
}
?>
If you use 'a' (alpha) value from the unnormalized color there will only be binary transparency.
ImagickPixel::getColor
(PECL imagick 2.0.0)
ImagickPixel::getColor — Devuelve el color
Descripción
array ImagickPixel::getColor
([ bool
$normalized = false
] )Advertencia
Esta función no está documentada actualmente, solamente se encuentra disponible la lista de parámetros.
Devuelve el color descrito por el objeto ImagickPixel, como una matriz. Si el color tiene establecido un canal de opacidad, es proporcionado como un cuarto valor de la lista.
Parámetros
-
normalized -
Normalizar los valores del color
Valores devueltos
Una matriz de valores de canal, normalizados si se da como parámetro TRUE. Lanza
una excepción ImagickPixelException si se produjo un error.
roman ¶
1 month ago
