Combine two images using PHP GD - php

I am trying to create an image which will have my image A (uploaded image) and image B (my watermark image). My problem is that I am not getting the proper way to extend the size of image from the bottom which will be created with image A and B.
My code is -
$img_width=imagesx($img);
$img_height=imagesy($img);
$watermark=imagecreatefrompng($watermark);
$watermark_width=imagesx($watermark);
$watermark_height=imagesy($watermark);
$image=imagecreatetruecolor($img_width, $img_height+35);
imagealphablending($image, false);
$dest_x=$img_width-$watermark_width;
$dest_y=$img_height-$watermark_height+20;
imagecopy($img, $watermark, $dest_x, $dest_y, 0, 0,$watermark_width, $watermark_height);
imagesavealpha($img, true);
imagejpeg($img, $config['pdir']."/t/l-".$thepp, 90);
}
What I am getting with this code is -
Results http://www.9gag.in/pdata/t/l-76.jpg
You can see the watermark image is not totally merged with the image I want to create. I want an extended area in the destination image where the watermark will be fitted properly.

When you writes :
$dest_y=$img_height-$watermark_height+20;
I guess you really want :
$dest_y=$img_height-$watermark_height-20;
Y = 0 at the top of your image, so the more bottom you go, the more high is your height.

Related

Laravel imagecopy lowers image quality

I am coding a Laravel project where I let users add their own small image to a bigger image (something like milliondollarhomepage.com).
I use the PHP imagecopy(); to add the small image to the bigger image. The problem is: the colors get really poor after merging the two images together. I think the new image only has the colors of the previous image, so no new colors can be added to the image.
My code:
$pixel = GET_INFO_HERE;
$dest = imagecreatefrompng(public_path('storage/pixels.png'));//get big image
$src = imagecreatefrompng(public_path('storage/uploads/' . $pixel->imagename));//get small image to add
imagecopy($dest, $src, $pixel->x_position, $pixel->y_position, 0, 0, $pixel->width, $pixel->height);
ob_start();
imagepng($dest);
$newpixelsimg = ob_get_clean();
Storage::put('public/pixels.png', $newpixelsimg);//save new image
imagedestroy($dest);
imagedestroy($src);
I tried to use imagetruecolortopalette($dest, false, 255); before the imagecopy(); method, but it didn't change anything.
I have been searching for solutions for a long time now, but I couldn't get it to work yet.
Is there anyone who has a solution for this?

WideImage - Canvas with transparent background

We're using a CMS with WideImage built in and no scope to change this, however we've come up against a situation where we need to produce 300x300 images.
However the images that are uploaded at approx 100x100 in jpg and png format with various levels of transparency.
I'm trying to create a 300x300 canvas, and place the 100x100 image inside of it - however I want both the canvas to remain transparent, and the image placed on top to keep its transparency.
I've got
$image = WideImage::loadFromFile( $this->local_path );
$canvas = WideImage::createTrueColorImage(300, 300);
$canvas_bg = $canvas->allocateColor(255, 255, 255);
$canvas->fill(0, 0, $canvas_bg);
$resized_image = $canvas->merge($image);
However this obviously just adds a white background to the canvas, I cant figure out from their documentation how to make it transparent.
Thanks
How about:
$image = WideImage::loadFromFile($this->local_path);
$resized_image = $image->resizeCanvas(300, 300, 0, 0);
You can specify the X and Y location of the image within the new canvas as well as its width and height. $image->resizeCanvas(300, 300, "center", "center") works quite well.

Image Color Change After Watermark Apply in PHP

Developed Watermark Script,but on adding water mark the image color changes.
// merge the source image and the watermark
imagecopy($image, $watermark, $watermark_pos_x, $watermark_pos_y, 0, 0, imagesx($watermark), imagesy($watermark));
Change Image color after Watermark.
Without Watermark Image
After Watermark Apply
Since you are already using GD functions, just apply a filter to your image:
imagefilter($img, IMG_FILTER_GRAYSCALE);
Check the documentation: http://php.net/manual/en/function.imagefilter.php

PHP GD imagecopymerge php with transparency

I'm trying to draw a partially transparent PNG image on another image I created in my script, but it behaves really strange. I'm using imagecopymerge because I want to use different opacity values, but when I do this, the output looks like this:
There must be some problem when processing the image. the yellow parts aren't even visible in the png file. Everything but the black parts are transparent.
I saved the image in photoshop and it looks ok when I just use imagecopy or something.
here are the relevant parts of the script:
$imgLogoBg = file_exists($logoBgImgFile)?imagecreatefrompng($logoBgImgFile):null;
$image = imagecreatetruecolor(imagesx($imgBase), imagesy($imgBase));
imagefill($image, 0,0, imagecolorat($imgBase,0,0));
imagecopymerge( $image, $imgLogoBg,
0,0,
0,0, imagesx($imgLogoBg), imagesy($imgLogoBg),50);
imagepng($image);
I can't figure out what the problem is. when I use another image the result is similar.

Can i change image file size with php?

I made a small function to upload images then show them on my website.
My question is now, can I change the file size of a image, on same time as I upload it?
Take facebook as example. Even large images has a size on like 65kb.
If so, witch function should I use?
Thanks,
use the imagecopyresampled function:
$source_image = imagecreatefromjpeg("youtimagejpg");
$src_w= imagesx($source_image);
$src_h= imagesy($source_image);
$dest_image = imagecreatetruecolor(100, 100); //targeted width and height
imagecopyresampled($dest_image, $source_image, 0, 0, 0, 0, 100, 100, $source_w, $source_h);
imagejpeg($dest_image,NULL,80);
//Replace null by the path if you want to save on the server, otherwise the image will be sent to the client intead.
If you want to reduce the size of the image without resizing it; use the imagejpeg function (with a low quality factor)
There are next ways to change image size:
Convert to another image format.
Save image with lossy compression (http://en.wikipedia.org/wiki/Lossy_compression)
Resample image with another width & height (http://php.net/manual/en/function.imagecopyresampled.php)

Categories