Gå til innhold

imagecreatefromjpeg() fra en PHP-fil


Anbefalte innlegg

Jeg bruker et script for å hente bilder å endre størrelsen (resize.php). Men når jeg skal legge til tekst på bildet med siden (tekst-bilde.php) går det ikke med:

$image = imagecreatefromjpeg("resize.php?id=555480&w=128&h=128&type=bakgrunn");

Har også prøvd å legge inn alle veriablene i selve tekst-bilde.php så det kun blir:

$image = imagecreatefromjpeg("resize.php");

men det går fortsatt ikke. Finner heller ikke noe om dette på php.net. Noen som vet en løsning? :)

Endret av simenss
Lenke til kommentar
Videoannonse
Annonse

Går det ann å slå sammen disse scriptene på noen måter da? Så tekst-bilde.php setter tekst på bildet, og endrer størrelsen som resize.php.

 

tekst-bilde.php:

<?php
header("Content-type: image/jpeg");

$text = $_GET['text'];
$color = $_GET['color'];
$font1 = $_GET['font'];
$font = "../font-bin/$font1.TTF";
$angle = 0;

function fixbbox($bbox)
{
$xcorr=0-$bbox[6]; //northwest X
$ycorr=0-$bbox[7]; //northwest Y
$tmp_bbox['left']=$bbox[6]+$xcorr;
$tmp_bbox['top']=$bbox[7]+$ycorr;
$tmp_bbox['width']=$bbox[2]+$xcorr;
$tmp_bbox['height']=$bbox[3]+$ycorr;

return $tmp_bbox;
}

$bredde = 110; // angi bredden på bildet
while($størrelse != true){
$i++;
$bildet = fixbbox(imagettfbbox($i,0,$font,$text));
if($bildet['width'] > $bredde)
{
$størrelse = true;
$i--;
}
}

// Create an image and fill the background with lightgray
$image = imagecreatefromjpeg("resize.php?image=242705.jpg&w=128&h=128");
//imagefill($image, 0, 0, hexdec("dddddd"));

// Run a fixed version of imagettfbbox()
$bbox = imagettfbbox_fixed($i, $angle, $font, $text);

// Make some text and center the text on the image.
// imagettftext() pivot is on lower left
imagettftext($image, $i, $angle, imagesx($image) / 1.7 - $bbox['width'] / 1.7, imagesy($image) / 2 + $bbox['height'] / 2, hexdec("#$shadow"), $font, $text);

imagettftext($image, $i, $angle, imagesx($image) / 2 - $bbox['width'] / 2, imagesy($image) / 2 + $bbox['height'] / 2, hexdec("#$color"), $font, $text);

// Show the image
imagejpeg($image);

function imagettfbbox_fixed($i, $angle, $font, $text)
{
// Get the boundingbox from imagettfbbox(), which is correct when angle is 0
$bbox = imagettfbbox($i, 0, $font, $text);

// Rotate the boundingbox
$angle = pi() * 2 - $angle * pi() * 2 / 360;
for ($i=0; $i<4; $i++)
{
$x = $bbox[$i * 2];
$y = $bbox[$i * 2 + 1];
$bbox[$i * 2] = cos($angle) * $x - sin($angle) * $y;
$bbox[$i * 2 + 1] = sin($angle) * $x + cos($angle) * $y;
}

// Variables which tells the correct width and height
$bbox['width'] = $bbox[0] + $bbox[4];
$bbox['height'] = $bbox[1] - $bbox[5];

return $bbox;
}
?> 

 

resize.php:

<?php
$w = $_GET['w'];
$h = $_GET['h'];
$proportional = TRUE;
$image = $_GET['image'];

function sizeImage($image, $w, $h, $proportional) {
   if (!$attr = getimagesize($image)) {
       trigger_error("GD: Image does not exist.  Must be gif, jpeg, or png!",E_USER_ERROR);
   }
   
   switch ($attr[2]) {
       case 1:
           $image = imagecreatefromgif($image);
           break;
       case 2:
           $image = imagecreatefromjpeg($image);
           break;
       case 3:
           $image = imagecreatefrompng($image);
           break;
       default:
 	header("Content-type: text/html");
           trigger_error("GD: Image type wrong.  Must be gif, jpeg, or png!",E_USER_ERROR);
   }
   if ($proportional) {
       if ($attr[0]<$attr[1]){
           $w = $h * ($attr[0]/$attr[1]);
       }
       else{
           $h = $w / ($attr[0]/$attr[1]);
         }   
   }
   $newimage = imagecreatetruecolor($w,$h);
   imagecopyresampled($newimage, $image, 0, 0, 0, 0, $w, $h, $attr[0], $attr[1]);
   imagejpeg($newimage);
   imagedestroy($image);
   imagedestroy($newimage);

}
sizeImage($image, $w, $h, $proportional);
?>

Lenke til kommentar

Sett inn resize.php der du har

$image = imagecreatefromjpeg("resize.php?image=242705.jpg&w=128&h=128");

 

Husk da å bruke $newimage og ikke $image senere i scriptet.

 

Variablene image=242705.jpg&w=128&h=128 må du definere i scriptet siden det nå blir samme fil.

Lenke til kommentar
Sett inn resize.php der du har

$image = imagecreatefromjpeg("resize.php?image=242705.jpg&w=128&h=128");

 

Husk da å bruke $newimage og ikke $image senere i scriptet.

 

Variablene image=242705.jpg&w=128&h=128 må du definere i scriptet siden det nå blir samme fil.

Den klarer nå å endre størrelsen, men den legger ikke til teksten. Har prøvd å endre flere ting, men får det ikke helt til. Koden ser nå slik ut:

 

<?php
header("Content-type: image/jpeg");

// Hvis ttext er null
if($_GET['text']==NULL)
{
$text = "MMS-uploader.com";
}
else
{
$text = $_GET['text'];
}

// Hvis color er null
if($_GET['color']==NULL)
{
$color = "000000";
}
else
{
$color = $_GET['color'];
}

// Hvis shadow er null
if($_GET['shadow']==NULL && $_GET['color']==NULL)
{
$shadow = "FFFFFF";
}
elseif($_GET['shadow']==NULL && $_GET['color']!==NULL)
{
$shadow = NULL;
}
else
{
$shadow = $_GET['shadow'];
}

// Hvis font er null
if($_GET['font']==NULL)
{
$font = "../font-bin/Arial.TTF";
}
else
{
$font = $_GET['font'];
$font = "../font-bin/$font.TTF";
}

// Hvis color er null og farge er svart

$angle = 0;

function fixbbox($bbox)
{
$xcorr=0-$bbox[6]; //northwest X
$ycorr=0-$bbox[7]; //northwest Y
$tmp_bbox['left']=$bbox[6]+$xcorr;
$tmp_bbox['top']=$bbox[7]+$ycorr;
$tmp_bbox['width']=$bbox[2]+$xcorr;
$tmp_bbox['height']=$bbox[3]+$ycorr;

return $tmp_bbox;
}

$bredde = 110; // angi bredden på bildet
while($størrelse != true){
$i++;
$bildet = fixbbox(imagettfbbox($i,0,$font,$text));
if($bildet['width'] > $bredde)
{
$størrelse = true;
$i--;
}
}

// resize.php START

$w = 128;
$h = 128;
$proportional = TRUE;
$image = "999535.jpg";

function sizeImage($image, $w, $h, $proportional) {
  if (!$attr = getimagesize($image)) {
      trigger_error("GD: Image does not exist.  Must be gif, jpeg, or png!",E_USER_ERROR);
  }
  
  switch ($attr[2]) {
      case 1:
          $image = imagecreatefromgif($image);
          break;
      case 2:
          $image = imagecreatefromjpeg($image);
          break;
      case 3:
          $image = imagecreatefrompng($image);
          break;
      default:
 header("Content-type: text/html");
          trigger_error("GD: Image type wrong.  Must be gif, jpeg, or png!",E_USER_ERROR);
  }
  if ($proportional) {
      if ($attr[0]<$attr[1]){
          $w = $h * ($attr[0]/$attr[1]);
      }
      else{
          $h = $w / ($attr[0]/$attr[1]);
        }   
  }
  $newimage = imagecreatetruecolor($w,$h);
  imagecopyresampled($newimage, $image, 0, 0, 0, 0, $w, $h, $attr[0], $attr[1]);
  imagejpeg($newimage);
  imagedestroy($image);
  imagedestroy($newimage);

}
sizeImage($image, $w, $h, $proportional);
// rezize.php SLUTT


// Run a fixed version of imagettfbbox()
$bbox = imagettfbbox_fixed($i, $angle, $font, $text);

// Make some text and center the text on the image.
// imagettftext() pivot is on lower left


// Skygge
imagettftext($newimage, $i, $angle, imagesx($newimage) / 1.7 - $bbox['width'] / 1.7, imagesy($newimage) / 2 + $bbox['height'] / 2, hexdec("#$shadow"), $font, $text);

// Tekst
imagettftext($newimage, $i, $angle, imagesx($newimage) / 2 - $bbox['width'] / 2, imagesy($newimage) / 2 + $bbox['height'] / 2, hexdec("#$color"), $font, $text);


// Show the image
imagejpeg($newimage);

function imagettfbbox_fixed($i, $angle, $font, $text)
{
// Get the boundingbox from imagettfbbox(), which is correct when angle is 0
$bbox = imagettfbbox($i, 0, $font, $text);

// Rotate the boundingbox
$angle = pi() * 2 - $angle * pi() * 2 / 360;
for ($i=0; $i<4; $i++)
{
$x = $bbox[$i * 2];
$y = $bbox[$i * 2 + 1];
$bbox[$i * 2] = cos($angle) * $x - sin($angle) * $y;
$bbox[$i * 2 + 1] = sin($angle) * $x + cos($angle) * $y;
}

// Variables which tells the correct width and height
$bbox['width'] = $bbox[0] + $bbox[4];
$bbox['height'] = $bbox[1] - $bbox[5];

return $bbox;
}
?> 

 

Har lagt merke til at det står imagejpeg($newimage); to steder i scriptet, men det fungererer heller ikke når jeg fjerner en av disse.

Lenke til kommentar

Dude, du skal ikke skrive bildet i funksjonen som endrer størrelsen, og i alle fall ikke ødlegge det der. Her er en som funker ;)

Ta en kikk på endringene:

 

header("Content-type: image/jpeg");

 

// Hvis ttext er null

if($_GET['text']==NULL)

{

$text = "MMS-uploader.com";

}

else

{

$text = $_GET['text'];

}

 

// Hvis color er null

if($_GET['color']==NULL)

{

$color = "000000";

}

else

{

$color = $_GET['color'];

}

 

// Hvis shadow er null

if($_GET['shadow']==NULL && $_GET['color']==NULL)

{

$shadow = "FFFFFF";

}

elseif($_GET['shadow']==NULL && $_GET['color']!==NULL)

{

$shadow = NULL;

}

else

{

$shadow = $_GET['shadow'];

}

 

// Hvis font er null

if($_GET['font']==NULL)

{

$font = "arial.ttf";

}

else

{

$font = $_GET['font'];

$font = "arial.ttf";

}

 

// Hvis color er null og farge er svart

 

$angle = 0;

 

function fixbbox($bbox)

{

$xcorr=0-$bbox[6]; //northwest X

$ycorr=0-$bbox[7]; //northwest Y

$tmp_bbox['left']=$bbox[6]+$xcorr;

$tmp_bbox['top']=$bbox[7]+$ycorr;

$tmp_bbox['width']=$bbox[2]+$xcorr;

$tmp_bbox['height']=$bbox[3]+$ycorr;

 

return $tmp_bbox;

}

 

$bredde = 110; // angi bredden på bildet

while($størrelse != true){

$i++;

$bildet = fixbbox(imagettfbbox($i,0,$font,$text));

if($bildet['width'] > $bredde)

{

$størrelse = true;

$i--;

}

}

 

// resize.php START

 

$w = 128;

$h = 128;

$proportional = TRUE;

$image = "bg.jpg";

 

function sizeImage($image, $w, $h, $proportional) {

if (!$attr = getimagesize($image)) {

trigger_error("GD: Image does not exist. Must be gif, jpeg, or png!",E_USER_ERROR);

}

 

switch ($attr[2]) {

case 1:

$image = imagecreatefromgif($image);

break;

case 2:

$image = imagecreatefromjpeg($image);

break;

case 3:

$image = imagecreatefrompng($image);

break;

default:

header("Content-type: text/html");

trigger_error("GD: Image type wrong. Must be gif, jpeg, or png!",E_USER_ERROR);

}

if ($proportional) {

if ($attr[0]<$attr[1]){

$w = $h * ($attr[0]/$attr[1]);

}

else{

$h = $w / ($attr[0]/$attr[1]);

}

}

$newimage = imagecreatetruecolor($w,$h);

imagecopyresampled($newimage, $image, 0, 0, 0, 0, $w, $h, $attr[0], $attr[1]);

//imagejpeg($newimage);

imagedestroy($image);

//imagedestroy($newimage);

return $newimage;

 

}

$newimage = sizeImage($image, $w, $h, $proportional);

// rezize.php SLUTT

 

 

// Run a fixed version of imagettfbbox()

$bbox = imagettfbbox_fixed($i, $angle, $font, $text);

 

// Make some text and center the text on the image.

// imagettftext() pivot is on lower left

 

 

// Skygge

imagettftext($newimage, $i, $angle, imagesx($newimage) / 1.7 - $bbox['width'] / 1.7, imagesy($newimage) / 2 + $bbox['height'] / 2, hexdec("#$shadow"), $font, $text);

 

// Tekst

imagettftext($newimage, $i, $angle, imagesx($newimage) / 2 - $bbox['width'] / 2, imagesy($newimage) / 2 + $bbox['height'] / 2, hexdec("#$color"), $font, $text);

 

 

// Show the image

imagejpeg($newimage);

 

function imagettfbbox_fixed($i, $angle, $font, $text)

{

// Get the boundingbox from imagettfbbox(), which is correct when angle is 0

$bbox = imagettfbbox($i, 0, $font, $text);

 

// Rotate the boundingbox

$angle = pi() * 2 - $angle * pi() * 2 / 360;

for ($i=0; $i<4; $i++)

{

$x = $bbox[$i * 2];

$y = $bbox[$i * 2 + 1];

$bbox[$i * 2] = cos($angle) * $x - sin($angle) * $y;

$bbox[$i * 2 + 1] = sin($angle) * $x + cos($angle) * $y;

}

 

// Variables which tells the correct width and height

$bbox['width'] = $bbox[0] + $bbox[4];

$bbox['height'] = $bbox[1] - $bbox[5];

 

return $bbox;

}

imagejpeg($newimage);

imagedestroy($newimage);

 

 

 

EDIT:

du må selv endre bildet og fonten igjen! Jeg har ikke sett noe på selve scripet ditt, men det skan effektiviserers :)

 

Lykke til :thumbup:

Endret av ????????
Lenke til kommentar
Dude, du skal ikke skrive bildet i funksjonen som endrer størrelsen, og i alle fall ikke ødlegge det der. Her er en som funker ;)

Ta en kikk på endringene:

Tusen takk, nok en gang ????????! Du er en knupp :love: Selv jeg med mine PHP-kunnskaper burde vel ha skjønt problemet med en gang, men men.. Man lærer jo så lenge man lever! ;)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...