User of my site upload images which are used as avatars. I have set a upload limit size of 2 MB. At most places I only require thumbnails. But users upload images with far bigger resolutions. I store these files on my file-system.
How can i create thumbnails and store them instead of large sized files?
Depending on your installation / server setup, you have several possibilities.
You could use the GD library, and something like its imagecopyresized function
Or you could use the Imagick extension, and something like its thumbnailImage method.
I would say that I've quite never seen a server without GD installed -- for Imagick, its less likely to be installed by default :-(
Another solution might be to call the convert command-line utility (it comes with ImageMagick -- independantly of any PHP extension), using something like exec to call it.
Advantage, with that, would be that you wouldn't be limited by memory_limit, as the resizing would be performed by an external tool -- but, of course, it also means that your application will rely on an external tool, which is not always nice...
If necessary, there are plenty of tutorials about GD ; for instance, those might interest you :
How to create thumbnails with PHP and gd : it uses a batch process to generate thumbnails for many images -- which might be useful if you have to generate thumbnails for all images that you already have
Thumbnail generation with PHP tutorial : does some stuff not often seen, like create square thumbnails, by centering the orignal image and adding some background color.
You can use the GD module or the ImageMagick module to resize and shrink any uploaded images.
If you google around for something like "PHP image resizer", you'll find lots of examples. I tend to use GD, as I have an old bit of code kicking around that works just fine. Assuming you have a known uploaded jpeg image found at $srcImgPath, you could do something like the following, where $newWidth and $newHeight are the new sizes of image you want:
list($width, $height, $type) = getimagesize($srcImgPath);
$srcImg = imagecreatefromjpeg($srcImgPath);
if ($srcImg === false) return false;
$workImg = imagecreatetruecolor($newWidth,$newHeight);
imagecopyresampled($workImg,$srcImg,0,0,0,0,$newWidth,$newHeight,$width,$height);
imagejpeg($workImg,$newFilename,$quality);
Functionalize as appropriate, and be sure to specify the $quality. You can abstract this code out to handle gifs and pngs very easily as well.
Check out the gd library, specifically the imagecopyresized function
Just a quick note, if you go down the GD route, use imagecopyresampled, as it produces cleaner looking images. By that I mean it won't look as grainy and/or pixely.
Link to the PHP manual on the function: http://us2.php.net/manual/en/function.imagecopyresampled.php
I would recomend the timthumb.php script. it is rock solid.
http://www.darrenhoyt.com/2008/04/02/timthumb-php-script-released/
If you have Imagick installed in your PHP setup. Then there is a function that does this. Imagick::thumbnailImage()
If you don't have Imagick, then the GD library will come in handy. Since they have imagcopyresized()
Isn't Google AppEngine fitted with a subset of PIL? There is the 'resize' function that could be use... and best of all, you are getting a free quota!
Related
I have an image of NxN size and an image of MxM, with N>M. I want to place the second on top of the first, but I want to do it on a specific pixel e.g.(10,15)
I installed imagemagick and start playing with it cli (planning to try with php later), but I could not find if there is something that I could use for this purpose or if it is possible by combining some commands.
So my question(s):
Is something like this possible with imagemagick?
If yes, how could I achieve it in command line imagemagick?
If yes, how could I achieve it with imagemagick in php?
Expanding on my comment, I think php gd would be a good fit for this. PHP gd is better integrated into php and works better in my opinion. I use it for a host of things (resizing thumbnails most notably). Your question seems very similar to placing a watermark on an image, ie one image is place on top of another and it is exported as a single raster image. Here's a quick example for creating this watermark:
http://www.sitepoint.com/watermark-images-php/
This example exports it directly to the browser, but it can be easily modified to save the image locally to your file system. Enjoy!
Is there any basic (free or not), but usable - not like libpuzzle - image fingerprinting/similarity/compare module for PHP, which works akin to TinEye or Google image upload search? It's basically needed to avoid uploading almost the same (but with watermarks, resized etc.) image twice into a set of 50-300 images.
Take a look at http://www.intelliot.com/2008/03/sorted-directory-listing-image-resizing-comparison-and-similarity-in-php/
This is a very interesting educational article about image comparison. It wouldn't be hard at all to adapt to PHP using the GD library or ImageMagick.
http://www.hackerfactor.com/blog/index.php?/archives/432-Looks-Like-It.html
Good luck !
So I'm in the middle of working on a website that deals with photographs. A user uploads their original photograph and GD library creates a smaller sized image of the same photo. However, when comparing a manually sized down image with the GD one, the GD image seems to lose quite a bit of color quality like it had been slightly desaturated. Any alternate suggestions or ways to improve this?
Thanks!
I'd advice using imagemagick for handling anything serious about photos.
besides quality, you'll find using imagick functions like more convenient
Imagick::cropThumbnailImage()
Imagick::thumbnailImage()
Use imagecopyresampled instead of imagecopyresized. It gives much better quality. Also, try NOT to use GIF images as output.
Wow, the answer is imagemagick. Easier to use and maintains the full photograph quality!
I need some PHP classes that deal with image processing in a good manner. I have made a thumbnail creator myself but the end result quality is just horrible.
Is it also possible to let PHP convert and save all images to one type. For example take an image(jpg,png,gif), compress it, resize it, and save as png.
Can anyone recommend some good classes for this.
Check out https://github.com/avalanche123/Imagine, given you use PHP 5.3, it will solve most of your image processing needs
You can take a look at this one
http://shiftingpixel.com/2008/03/03/smart-image-resizer/
You can look into the php gd library, or imageMagick, which has bindings for php.
If you have access to command-line i'd recommend image magic. The comman-line version has the advantage that it includes several features for batch processing.
i work in lamp environment .
i search script that know to take a image , that user upload to my site.
and make from this image , new image that contain the real image with small stamp on the top corner.
thanks
your best bet would be to look here it is an ideal script provided by the PHP.net user guide. Just make sure that you have the GD library installed
You'd want a watermark which can be accomplished with GD
What you are describing is "watermarking". There are tools out there to do this, a lot of image manipulation packages have this feature.
A search for this might lead you to something useful.
Have a look at these PHP tutorials:
Using imagecopymerge() to create a translucent watermark
Adding watermarks to images using alpha channels