Making a copy of a html image

PHP programming forum. Ask questions or help people concerning PHP code. Don't understand a function? Need help implementing a class? Don't understand a class? Here is where to ask. Remember to do your homework!

Moderator: General Moderators

Post Reply
Parody
Forum Contributor
Posts: 252
Joined: Fri May 06, 2005 7:06 pm
Location: Great Britain

Making a copy of a html image

Post by Parody »

I found a script (imgsize.php) which allows resizing of images with get variables such as:

imgsize.php?w=200&h=250&img=example.jpeg

However, my problem is that I would like to save this file as a thumbnail of the original image, but when I use the php copy() function I recieve the error that it cannot open the file or stream. Is this due to the fact that the source file is php/html and the output is an image? I have made sure the link the copy function is using works and displays an image. I think the script was original written to produce thumbnails on-the-fly and so this wasn't taken into account. Could someone either explain exactly what the error is or provide a solution.

Thanks
User avatar
Christopher
Site Administrator
Posts: 13596
Joined: Wed Aug 25, 2004 7:54 pm
Location: New York, NY, US

Post by Christopher »

You might need to create an actual file to move/copy.
(#10850)
Parody
Forum Contributor
Posts: 252
Joined: Fri May 06, 2005 7:06 pm
Location: Great Britain

Post by Parody »

How do I create an image file from a html "image"? When you load the html page all you get is an image, you can save it just as a normal image.
User avatar
John Cartwright
Site Admin
Posts: 11470
Joined: Tue Dec 23, 2003 2:10 am
Location: Toronto
Contact:

Post by John Cartwright »

What exactly are you given in this html file? Simply a <img> tag? In that case you can use some regular expression to grab the image path then file_get_contents to capture the contents of the image.. or did I misunderstand?
User avatar
Ambush Commander
DevNet Master
Posts: 3698
Joined: Mon Oct 25, 2004 9:29 pm
Location: New Jersey, US

Post by Ambush Commander »

It appears this script takes the image and outputs it directly to the browser. If you can get the script to pipe its output to a file, that would probably do the trick.
Parody
Forum Contributor
Posts: 252
Joined: Fri May 06, 2005 7:06 pm
Location: Great Britain

Post by Parody »

I'm just looking at the script and I worked out that it "reads" a variable as if it were an image, so...

If I take that variable and write it to a file I should have an image right?

I'll write back in a second, hopefully with a solution.
Parody
Forum Contributor
Posts: 252
Joined: Fri May 06, 2005 7:06 pm
Location: Great Britain

Post by Parody »

Ok, that didn't work. Here is the source code:

Code: Select all

header ("Content-type: image/jpeg");
/*
JPEG / PNG Image Resizer
Parameters (passed via URL):

img = path / url of jpeg or png image file

percent = if this is defined, image is resized by it's
          value in percent (i.e. 50 to divide by 50 percent)

w = image width

h = image height

constrain = if this is parameter is passed and w and h are set
            to a size value then the size of the resulting image
            is constrained by whichever dimension is smaller

Requires the PHP GD Extension

Outputs the resulting image in JPEG Format

By: Michael John G. Lopez - http://www.sydel.net
Filename : imgsize.php
*/

$img = $_GET['img'];
$percent = $_GET['percent'];
$constrain = $_GET['constrain'];
$w = $_GET['w'];
$h = $_GET['h'];

// get image size of img
$x = @getimagesize($img);
// image width
$sw = $x[0];
// image height
$sh = $x[1];

if ($percent > 0) {
	// calculate resized height and width if percent is defined
	$percent = $percent * 0.01;
	$w = $sw * $percent;
	$h = $sh * $percent;
} else {
	if (isset ($w) AND !isset ($h)) {
		// autocompute height if only width is set
		$h = (100 / ($sw / $w)) * .01;
		$h = @round ($sh * $h);
	} elseif (isset ($h) AND !isset ($w)) {
		// autocompute width if only height is set
		$w = (100 / ($sh / $h)) * .01;
		$w = @round ($sw * $w);
	} elseif (isset ($h) AND isset ($w) AND isset ($constrain)) {
		// get the smaller resulting image dimension if both height
		// and width are set and $constrain is also set
		$hx = (100 / ($sw / $w)) * .01;
		$hx = @round ($sh * $hx);

		$wx = (100 / ($sh / $h)) * .01;
		$wx = @round ($sw * $wx);

		if ($hx < $h) {
			$h = (100 / ($sw / $w)) * .01;
			$h = @round ($sh * $h);
		} else {
			$w = (100 / ($sh / $h)) * .01;
			$w = @round ($sw * $w);
		}
	}
}

$im = @ImageCreateFromJPEG ($img) or // Read JPEG Image
$im = @ImageCreateFromPNG ($img) or // or PNG Image
$im = @ImageCreateFromGIF ($img) or // or GIF Image
$im = false; // If image is not JPEG, PNG, or GIF

if (!$im) {
	// We get errors from PHP's ImageCreate functions...
	// So let's echo back the contents of the actual image.
	readfile ($img);
} else {
	// Create the resized image destination
	$thumb = @ImageCreateTrueColor ($w, $h);
	// Copy from image source, resize it, and paste to image destination
	@ImageCopyResampled ($thumb, $im, 0, 0, 0, 0, $w, $h, $sw, $sh);
	// Output resized image
	@ImageJPEG ($thumb);
}
The bottom else statement seems to be controlling the output as is commented. Unfortunately, the image is defined by all three lines and so I am at a loss as to how to compile this into a standalone image file. I'm not sure but are these GD functions?

One thing I have tried is opening the html file as source code using another php script I have, which produced what looked exactly like image source code and when I compared it to the original image it looked similar, but when saved it was unreadable.

How can I open the source code of the output image of the file shown above and then save it to another file?

As always, all help is appreciated.

Thanks
User avatar
Christopher
Site Administrator
Posts: 13596
Joined: Wed Aug 25, 2004 7:54 pm
Location: New York, NY, US

Post by Christopher »

The documentation for ImageJPEG might be of interest to you.
(#10850)
Parody
Forum Contributor
Posts: 252
Joined: Fri May 06, 2005 7:06 pm
Location: Great Britain

Post by Parody »

I just found out how to do it! Thanks, I did use Imagejpeg(). There's an article on about.com that I used.

Here it is if anyone reading this wants to know how to do it

http://php.about.com/od/advancedphp/ss/ ... nail_4.htm
alex.barylski
DevNet Evangelist
Posts: 6267
Joined: Tue Dec 21, 2004 5:00 pm
Location: Winnipeg

Post by alex.barylski »

Don't miss the donut by looking through the hole
:lol: :lol: :lol:

What the hell...haha... :P
Post Reply