Breite ändern

27/03/2011 - 01:47 von Daniel Schmidt | Report spam
Hallo,

ich lese mit nachfolgender Funktion ein GIF aus. Um dies
weiterzubearbeiten möchte ich die Breite des Bildes àndern.


function myImageCreateFromGif($file_or_url) {

$dummy_file = "/tmp/dummy.gif";

# if this is a url, use fopen to get the file data, then
# save it to a dummy file
if (preg_match("/(http|ftp):\/\//i", $file_or_url)) {
# open the file using fopen, which supports remote URLs
$input = fopen($file_or_url, "rb");

# read the contents of the file
# will accept files up to 10Mb, but will probably get
# and EOF before that, we have to do it this way because
# filesize isn't designed to work with URLs. sigh.
$image_data = fread($input, 10000000);

fclose($input);

# write the contents to a dummy file
$output = fopen("$dummy_file", "wb");
fwrite($output, $image_data);
fclose($output);

# create the gif from the dummy file
$image = ImageCreateFromGif($dummy_file);

# get rid of the dummy file
unlink($dummy_file);

}

# if it's not a URL, we can simply open the image directly
else {
$image = ImageCreateFromGif($file_or_url);
}

if ($image) { return $image; }
else { return 0; }
}

$image = myImageCreateFromGif("../images/meinbild.gif");


Ziel ist es einen Button mit variabler Breite zu erzeugen. Die hohe
Kunst wàre natürlich die jeweils Äußeren 5px (rechts und links) zu
belassen und nur die inneren 100px zu vergrößern bzw. verkleinern.

imagecopyresized und imagecopyresampled scheinen hier nicht geeignet zu
sein. Hat jemand eine Idee, wie ich obiges Script veràndern muss?

Grüße Daniel
 

Lesen sie die antworten

#1 Thomas PointedEars Lahn
27/03/2011 - 11:49 | Warnen spam
Daniel Schmidt wrote:

ich lese mit nachfolgender Funktion ein GIF aus. Um dies
weiterzubearbeiten möchte ich die Breite des Bildes àndern.


function myImageCreateFromGif($file_or_url) {

$dummy_file = "/tmp/dummy.gif";

# if this is a url, use fopen to get the file data, then
# save it to a dummy file
if (preg_match("/(http|ftp):\/\//i", $file_or_url)) {



Der Quelltext ab hier …

# open the file using fopen, which supports remote URLs
$input = fopen($file_or_url, "rb");

# read the contents of the file
# will accept files up to 10Mb, but will probably get
# and EOF before that, we have to do it this way because
# filesize isn't designed to work with URLs. sigh.
$image_data = fread($input, 10000000);

fclose($input);

# write the contents to a dummy file
$output = fopen("$dummy_file", "wb");
fwrite($output, $image_data);
fclose($output);



… bis hier ist überflüssig, ebenso das ganze Gefasel über die Beschrànkungen
von filesize(). Ich habe auch noch nie eine 10 Mb (bzw. MiB) grosse GIF-
Grafik gesehen.

# create the gif from the dummy file
$image = ImageCreateFromGif($dummy_file);



Diese Funktion akzeptiert auch URLs als Parameter, wenn es fopen() kann.
RTFM.

# get rid of the dummy file
unlink($dummy_file);



Und dann musst Du auch nichts mehr löschen, da Du bis dahin auch nichts
speichern musstest.


}

# if it's not a URL, we can simply open the image directly
else {
$image = ImageCreateFromGif($file_or_url);
}



Wie gesagt, überflüssig.

if ($image) { return $image; }
else { return 0; }
}

$image = myImageCreateFromGif("../images/meinbild.gif");



Damit ist die gesamte myImageCreateFromGif-Funktion überflüssig:

$image = imagecreatefromgif('../images/meinbild.gif');

Der Funktionsname der GD-Funktion sollte genau so geschrieben werden
(zumindest jedoch mit kleinem Anfangsbuchstaben), da es sich nicht um einen
Konstruktor handelt.



Ziel ist es einen Button mit variabler Breite zu erzeugen. Die hohe
Kunst wàre natürlich die jeweils Äußeren 5px (rechts und links) zu
belassen und nur die inneren 100px zu vergrößern bzw. verkleinern.



Wie bitte?

imagecopyresized und imagecopyresampled scheinen hier nicht geeignet zu
sein. Hat jemand eine Idee, wie ich obiges Script veràndern muss?



Ausser der o.g. Reduktion auf einen Einzeiler nicht, da ich nicht verstehe,
wie man 100px vergrössert. Entweder der Button wird grösser (breiter) oder
er wird es nicht.

PointedEars

Ähnliche fragen