Page 1 of 1
Picture converting GIF to JPEG
Posted: Fri Jan 05, 2007 9:36 pm
by tecktalkcm0391
Hello, I want to convert a gif to jpeg, and I have this from a while back:
Code: Select all
<?php
$watermarkee = '/home/public_html/car_pictures/17_l.gif';
$c['red']=0;
$c['green']=0;
$c['blue']=0;
$output = gif2jpeg($watermarkee, '', $c);
function gif2jpeg($p_fl, $p_new_fl='', $bgcolor=false){
list($wd, $ht, $tp, $at)=getimagesize($p_fl);
$img_src=imagecreatefromgif($p_fl);
$img_dst=imagecreatetruecolor($wd,$ht);
$clr['red']=255;
$clr['green']=255;
$clr['blue']=255;
if(is_array($bgcolor)) $clr=$bgcolor;
$kek=imagecolorallocate($img_dst,
$clr['red'],$clr['green'],$clr['blue']);
imagefill($img_dst,0,0,$kek);
imagecopyresampled($img_dst, $img_src, 0, 0,
0, 0, $wd, $ht, $wd, $ht);
$draw=true;
if(strlen($p_new_fl)>0){
if($hnd=fopen($p_new_fl,'w')){
$draw=false;
fclose($hnd);
}
}
if(true==$draw){
header("Content-type: image/jpeg");
imagejpeg($img_dst);
}else imagejpeg($img_dst, $p_new_fl);
imagedestroy($img_dst);
imagedestroy($img_src);
}
?>
Which converted a gif to jpeg then displayed it, but i want to do the same thing but just keep the file in a "file" (really in a string $output) so that I can send it into a script I have on a included file....which I only have going jpegs... Any help would be GREATLY appreciated
Posted: Fri Jan 05, 2007 9:44 pm
by feyd
Take a look at
imagejpeg().
Posted: Fri Jan 05, 2007 9:47 pm
by tecktalkcm0391
I know that "The filename argument is optional, and if left off, the raw image stream will be output directly." I just cant find out anything to make what I want happen...

Posted: Fri Jan 05, 2007 9:50 pm
by tecktalkcm0391
tecktalkcm0391 wrote:I know that "The filename argument is optional, and if left off, the raw image stream will be output directly." I just cant find out anything to make what I want happen...

Ha ha... got it now... how come everytime i post on here lately i found out the problem myself (with of course some help from others)... i feel stupid
Code: Select all
header("Content-type: image/jpeg");
imagejpeg($img_dst);
//changed to
return $img_dst;
Posted: Fri Jan 05, 2007 9:54 pm
by tecktalkcm0391
but wait... i still can't get it to work on my other code... how come it still is acting like a gif!
Posted: Fri Jan 05, 2007 10:18 pm
by feyd
Other code? Is it magical?
Posted: Fri Jan 05, 2007 10:26 pm
by tecktalkcm0391
The one code runs and then this one is required...
Code: Select all
<?php
ob_start();
function resize_png_image($img,$newWidth,$newHeight,$target){
$srcImage=imagecreatefrompng($img);
if($srcImage==''){
return FALSE;
}
$srcWidth=imagesx($srcImage);
$srcHeight=imagesy($srcImage);
$percentage=(double)$newWidth/$srcWidth;
$destHeight=round($srcHeight*$percentage)+1;
$destWidth=round($srcWidth*$percentage)+1;
if($destHeight > $newHeight){
// if the width produces a height bigger than we want, calculate based on height
$percentage=(double)$newHeight/$srcHeight;
$destHeight=round($srcHeight*$percentage)+1;
$destWidth=round($srcWidth*$percentage)+1;
}
$destImage=imagecreatetruecolor($destWidth-1,$destHeight-1);
if(!imagealphablending($destImage,FALSE)){
return FALSE;
}
if(!imagesavealpha($destImage,TRUE)){
return FALSE;
}
if(!imagecopyresampled($destImage,$srcImage,0,0,0,0,$destWidth,$destHeight,$srcWidth,$srcHeight)){
return FALSE;
}
if(!imagepng($destImage,$target)){
return FALSE;
}
imagedestroy($destImage);
imagedestroy($srcImage);
return TRUE;
}
$edgePadding=15; // used when placing the watermark near an edge
$quality=100; // used when generating the final image
$default_watermark='sold.png'; // the default image to use if no watermark was chosen
// be sure that the other options we need have some kind of value
$save_as='jpeg';
$v_position='center';
$h_position='center';
$wm_size='larger';
// file upload success
$size=getimagesize($watermarkee);
if($size[2]==2 || $size[2]==3){
// it was a JPEG or PNG image, so we're OK so far
$original=$watermarkee;
$target_name=date('YmdHis').'_'.
// if you change this regex, be sure to change it in generated-images.php:26
preg_replace('`[^a-z0-9-_.]`i','',$watermarkee);
$target="/home/muscleca/public_images/watermark/other/".$target_name;
//$target=dirname(__FILE__).'/results/'.$target_name;
//$watermark=dirname(__FILE__).'/watermarks/'.$watermark;
$wmTarget=$watermark.'.tmp';
$origInfo = getimagesize($original);
$origWidth = $origInfo[0];
$origHeight = $origInfo[1];
$waterMarkInfo = getimagesize($watermark);
$waterMarkWidth = $waterMarkInfo[0];
$waterMarkHeight = $waterMarkInfo[1];
// watermark sizing info
if($wm_size=='larger'){
$placementX=0;
$placementY=0;
$h_position='center';
$v_position='center';
$waterMarkDestWidth=$waterMarkWidth;
$waterMarkDestHeight=$waterMarkHeight;
// both of the watermark dimensions need to be 5% more than the original image...
// adjust width first.
if($waterMarkWidth > $origWidth*1.05 && $waterMarkHeight > $origHeight*1.05){
// both are already larger than the original by at least 5%...
// we need to make the watermark *smaller* for this one.
// where is the largest difference?
$wdiff=$waterMarkDestWidth - $origWidth;
$hdiff=$waterMarkDestHeight - $origHeight;
if($wdiff > $hdiff){
// the width has the largest difference - get percentage
$sizer=($wdiff/$waterMarkDestWidth)-0.05;
}else{
$sizer=($hdiff/$waterMarkDestHeight)-0.05;
}
$waterMarkDestWidth-=$waterMarkDestWidth * $sizer;
$waterMarkDestHeight-=$waterMarkDestHeight * $sizer;
}else{
// the watermark will need to be enlarged for this one
// where is the largest difference?
$wdiff=$origWidth - $waterMarkDestWidth;
$hdiff=$origHeight - $waterMarkDestHeight;
if($wdiff > $hdiff){
// the width has the largest difference - get percentage
$sizer=($wdiff/$waterMarkDestWidth)+0.05;
}else{
$sizer=($hdiff/$waterMarkDestHeight)+0.05;
}
$waterMarkDestWidth+=$waterMarkDestWidth * $sizer;
$waterMarkDestHeight+=$waterMarkDestHeight * $sizer;
}
}else{
$waterMarkDestWidth=round($origWidth * floatval($wm_size));
$waterMarkDestHeight=round($origHeight * floatval($wm_size));
if($wm_size==1){
$waterMarkDestWidth-=2*$edgePadding;
$waterMarkDestHeight-=2*$edgePadding;
}
}
// OK, we have what size we want the watermark to be, time to scale the watermark image
resize_png_image($watermark,$waterMarkDestWidth,$waterMarkDestHeight,$wmTarget);
// get the size info for this watermark.
$wmInfo=getimagesize($wmTarget);
$waterMarkDestWidth=$wmInfo[0];
$waterMarkDestHeight=$wmInfo[1];
$differenceX = $origWidth - $waterMarkDestWidth;
$differenceY = $origHeight - $waterMarkDestHeight;
// where to place the watermark?
switch($h_position){
// find the X coord for placement
case 'left':
$placementX = $edgePadding;
break;
case 'center':
$placementX = round($differenceX / 2);
break;
case 'right':
$placementX = $origWidth - $waterMarkDestWidth - $edgePadding;
break;
}
switch($v_position){
// find the Y coord for placement
case 'top':
$placementY = $edgePadding;
break;
case 'center':
$placementY = round($differenceY / 2);
break;
case 'bottom':
$placementY = $origHeight - $waterMarkDestHeight - $edgePadding;
break;
}
if($size[2]==3)
$resultImage = imagecreatefrompng($original);
else
$resultImage = imagecreatefromjpeg($original);
imagealphablending($resultImage, TRUE);
$finalWaterMarkImage = imagecreatefrompng($wmTarget);
$finalWaterMarkWidth = imagesx($finalWaterMarkImage);
$finalWaterMarkHeight = imagesy($finalWaterMarkImage);
imagecopy($resultImage,
$finalWaterMarkImage,
$placementX,
$placementY,
0,
0,
$finalWaterMarkWidth,
$finalWaterMarkHeight
);
if($size[2]==3){
imagealphablending($resultImage,FALSE);
imagesavealpha($resultImage,TRUE);
// SAVE THE IMAGE....
//imagepng($resultImage,$target,$quality);
// JUST DISPLAY THE IMAGE!!!!
header('content-type: image/png');
imagepng($resultImage);
}else{
// SAVE THE IMAGE....
// imagejpeg($resultImage,$target,$quality);
// JUST DISPLAY THE IMAGE!!!!
header('content-type: image/jpeg');
imagejpeg($resultImage);
}
imagedestroy($resultImage);
imagedestroy($finalWaterMarkImage);
unlink($wmTarget);
}
?>
Posted: Fri Jan 05, 2007 10:28 pm
by Kieran Huggins
Might have to do with the output buffer you start but never flush.
Posted: Fri Jan 05, 2007 10:32 pm
by tecktalkcm0391
Kieran Huggins wrote:Might have to do with the output buffer you start but never flush.
I don't think so, php automatically does it and if i use a jpeg image as the $watermarkee it workes great!
Posted: Fri Jan 05, 2007 11:35 pm
by tecktalkcm0391
AHHH!!! This is annoying me to death... more code:
Code: Select all
// database query for information about files called by $_GET
// $file = $location.$pictureid.'_'.$size.$imageType;
$location = "/home/public_images/watermark/";
$watermarkee = $file;
if($imageType=='gif'){
require($location.'gif.php');
$c['red']=0; $c['green']=0; $c['blue']=0;
$watermarkee = gif2jpeg($watermarkee, '', $c);
}
$watermark = $location.'sold.png';
require($location.'sold.php');
sleep(1);
die;
//more code ...
This is what I just to for the jpeg and hopefully i can get to work for gif