7
votes

php imagemagick jpg fond noir

J'ai un script PHP pour créer une vignette JPG de PDF comme suit;

<?php
$file ="test.pdf";
$im = new imagick(realpath($file).'[0]');
$im->setImageFormat("jpg");
$im->resizeImage(200,200,1,0);
// start buffering
ob_start();
$thumbnail = $im->getImageBlob();
$contents =  ob_get_contents();
ob_end_clean();
echo "<img src='data:image/jpg;base64,".base64_encode($thumbnail)."' />";
?>


4 commentaires

Une copie ou un lien vers le fichier JPG en question serait utile et un tir à l'écran de la sortie résultante.


Laurence Burke: Voici l'image résultante i.imgur.com/jyqc6.jpg


Quel est votre style CSS comme et pourriez-vous relier le JPG original ???


@Laurence Burke, le ci-dessus est le fichier JPG d'origine. Je n'ai pas de coiffage du tout ..


7 Réponses :


1
votes

Si votre version de Imagick n'est pas à jour, le SetImagebackgroundColor peut être faux.

échanger la ligne suivante xxx

à ceci (version Imagick> = 2.1 .0) xxx

ou (version imagick <2.1.0) xxx


2 commentaires

J'ai apporté des changements dans ma question .. Jetez un coup d'œil .. et votre suggestion ne fonctionne pas ..


@blasteralfred Pourriez-vous donner accès à une copie de votre PDF, car je pense que la question peut être liée à cela plutôt que le code que vous avez maintenant fourni ci-dessus. Le code mis à jour fonctionne sans problème avec PDF que j'ai.



1
votes

Je l'ai résolu par; xxx


1 commentaires

SET CompressionQuality ne fonctionne pas réellement dans cette situation. Pour le changement UTILISATION DE QUALITÉ SETITIMAGE COMPRESSIQUALITÉ



1
votes

L'ajout simplement que cela empêche le JPG d'être créé avec un fond noir xxx


2 commentaires

Où? S'il vous plaît donner une réponse au format de la question. Donc, dans ce cas, PHP valide.


$ IM-> SETTIMAGELPHACLANNEL (Imagick :: AlphaChannel_ReMove);



1
votes

Modifier ce code $ IM-> SETITIMAGEFORMAT ("JPG"); à ce code $ IM-> SETITIMAGEFORMAT ("PNG"); Si vous faites face à un problème de couleur d'arrière-plan.


0 commentaires

18
votes

Aucune des réponses précédemment affichées a fonctionné pour moi, cependant, le ci-dessous a fait:

$image = new Imagick;

$image->setResolution(300, 300);

$image->setBackgroundColor('white');

$image->readImage("{$originalPath}[0]");

$image->setImageFormat('jpg');

$image->scaleImage(500, 500, true);

$image->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);

$image->setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE);


0 commentaires

0
votes

Après des tentatives sans fin d'appuyer un fichier PDF avec une image JPEG sans obtenir des zones noires, j'ai trouvé la solution: la fonction Transformimagecolorspace

utilisé dans cette commande fonctionne parfaitement: < Pré> xxx


0 commentaires

0
votes

Il suffit d'utiliser des flattensimages () juste après la création d'un nouveau imagick (): xxx pré>

modifier: la méthode FlattenImages a été obsolète et supprimée. Utilisez P>

$im = $im->mergeImageLayers( imagick::LAYERMETHOD_FLATTEN );


0 commentaires