Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Best PHP Image Crop Class

Tags:

I'm designing a website and I need to:

  • Upload the image
  • Validate that it's an image (and not, oh I don't know.... a virus :) )
  • Resize the Image
  • convert to jpg

Essentially basic image upload

Instead of writing my own I'm trying to find a php class that let's me do all this, because as Jeff Atwood said, "never design what you can steal"

Now before you go ahead and downvote because I didn't do my research, I did:

Googling this brings up a huge amount of results, which is the problem, I don't know which results are useful and which are trash!

So far, Ive found:

  • https://stackoverflow.com/questions/4997127/php-class-to-upload-image-from-url-and-resize-it (I know it looks like a duplicate, but its not because it is asking for a URL fetcher)
  • http://net.tutsplus.com/tutorials/php/image-resizing-made-easy-with-php/
  • http://www.verot.net/php_class_upload.htm
  • http://blog.freelancer-id.com/index.php/2010/03/21/php-image-crop-resize-upload
  • http://www.phpclasses.org/package/2181-PHP-Process-files-and-images-uploaded-via-a-form.html
  • http://www.digitalgemstones.com/code/tools/ImgUploader.php

Does anyone have any experience with these classes? Can you recommend an outstanding image upload class?

like image 491
Tomas Reimers Avatar asked Jun 23 '11 21:06

Tomas Reimers


1 Answers

My personal favorite Image Manipulation Library is WideImage. It makes is ridiculously easy to do that kind of task.

WideImage::load('pic.png') ->crop('center', 'center', 90, 50)->saveToFile('cropped/pic.jpg'); 

As for validating if it is actually an image or not, use finfo or PEAR::Mime_type. I personally prefer PEAR::Mime_Type. It uses finfo but it's just simpler to use.

Using finfo:

$finfo = finfo_open(FILEINFO_MIME_TYPE); $mimetype = finfo_file($finfo, $filename);  $isImage = (preg_match('#^image/#', $mimetype) === 1); 

Using PEAR::Mime_Type:

$mimetype = MIME_Type::autoDetect($filename);  $isImage = MIME_Type::wildcardMatch('image/*', $mimetype); 
like image 133
Andrew Moore Avatar answered Oct 14 '22 15:10

Andrew Moore