2017-02-24 4 views
-1

J'ai besoin de recadrer l'image avec PHP en utilisant les dimensions.Comment rogner une image avec des cotes (sans perte de qualité) en PHP?

Et l'enregistrer dans le local avec le format JPEG.

Dimensions que je reçois est,

{"left":82.5,"top":48.875,"width":660,"height":371.25} 

je dois recadrer de la taille originale de l'image.

Ex. l'image est 1200x800, puis la dimension de l'image résultante de la taille réelle, ne pas redimensionner ou tout. Parce que la qualité devrait être la même.

Comment pourrais-je utiliser ces paramètres pour rogner l'image?

Est-ce possible?

+0

Quelles sont les dimensions de ces valeurs? 0.5 px sera difficile à générer – Martin

Répondre

0

Utilisez le haut-imagick class:

$image = realpath("/path/to/your/image.extension"); 
$cropped = realpath("/path/to/your/output/image.png"); 

$imObj = new Imagick(); 
$imObj->cropImage($width, $height, $offset_x, $offset_y); 
$imObj->setImageFormat("png"); // this is unnesesary, you can force an image format with the extension of the output filename. 
$imObj->writeImage($cropped); 

En ce qui concerne la production sans perte, utilisez un format d'image avec le codage sans perte. PNG est parfait pour le travail, car il a été conçu pour le transfert réseau (d'où l'entrelacement "Adam-7"). Cochez cette question connexe sur les formats d'image sans perte sur pile de conception graphique:

What are lossless image formats?

+1

Imagick est *** pas *** intégré dans 'Cette 'extension PECL n'est pas fournie avec PHP. ' – Martin

0

Vous pouvez utiliser imageCopyResampled fonction qui a été conçu à peu près exactement pour cela.

$image = imagecreatefromjpeg($imageFileURL); 
/*** 
* resize values (imported) 
***/ 
$left = 82; 
$top = 49; 
$width = 660; 
$height = 371; 

/*** 
* Create destination image 
***/ 
$newImage = imagecreatetruecolor($width,$height); 
$saveToFile = "destintion filespace of image file.jpg" 

if(imagecopyresampled($newImage, $image, //dest/source images 
     0, 0,       // dest coordinates 
    $left, $top,       // source coordinates 
    $width, $height,      // size of area to paste to 
    $width, $height      // size of area to copy from 
)){ 
    imagejpeg($newImage,$saveToFile,100); //zero compression saved to file 
    print "image resized ok!!"; 
} 

Le nouveau fileimage sera la taille spécifiée avec $width, $height et sera décalé par rapport à l'image d'origine par les valeurs données dans $left et $top. De votre question, cela ressemble à ce que vous voulez. Cela ne redimensionnera pas ou ne modifiera pas la compression de l'image (jusqu'à ce que vous sauvegardiez le fichier et que vous puissiez éventuellement définir ces détails vous-même).