Speichern mit Name und Format und Endung

DaveThuet

Erfahrenes Mitglied
Hallo Zusammen,

ich habe natürlich wiedermal ein Problem das ich nicht gelöst bekomme und komischerweise auch nicht mein Programmierer der Homepage... :(

Es geht um folgendes:
Wenn man ein Wallpaper wählt hier ein Beispiel und nun ein Download-Format wählt (im Fenster "Download-Auflösungen"), zum Beispiel 1280x960 (bis dahin geht es ohne Registrierung).
Nun möchte ich das man dann mit einem Rechtsklick aufs neu geöffnete Bild der Originalname mit der gewählten Grösse abspeichert als jpg, also in etwa so für die oben gemachten Beispiele "Closed rose 1280x960.jpg".
Ideal wäre auch wenn das Format mitübernommen werden könnte, also dann "Closed rose 1280x960.png".
Im Moment wird alles als "download.php" abgespeichet im Firefox und im Internet Explorer als "untitled.bmp".

Ich habe es bereits versucht indem ich den Bildname und das gewählte Bild-Format übergeben habe an die download.php aber alles ohne ersichtlichen Erfolg.
Hätte jemanden eine Lösungsidee?

Hier die zwei Seiten die den ganzen Prozess realisieren:
Als erstes die download.php:
PHP:
<?php
//Connection statement
require_once('XXX');
//Aditional Functions
require_once('XXX');
session_start();
header("location: download2.php?".$_SERVER['QUERY_STRING']);
?>
Und als zweites und die wichtigste die download2.php:
PHP:
<?php
//Connection statement
require_once('XXX');

//Aditional Functions
require_once('XXX');
session_start();
$filename = "XXX"
$groesse = getimagesize($filename);

cropImage($_GET['b'], $_GET['h'], $filename, 'jpg', '');
function cropImage($nw, $nh, $source, $stype, $dest) {

	$size = getimagesize($source);
	$w = $size[0];
	$h = $size[1];


$groessenkorrektur = ($_GET['b']/$_GET['h'])/($w/$h);
if($groessenkorrektur < 1) {
$groessenkorrektur = 1;
}

	$h = $size[1]/$groessenkorrektur;
switch ($size[2]) {
case 1: $simg = imagecreatefromgif($source); break;
case 2: $simg = imagecreatefromjpeg($source); break;
case 3: $simg = imagecreatefrompng($source); break;
default: trigger_error('This is not an allowed image type.', E_USER_WARNING); break;
}


	$dimg = imagecreatetruecolor($nw, $nh);
	$wm = $w/$nw;
	$hm = $h/$nh;
	$h_height = $nh/2;
	$w_height = $nw/2;
	if($w> $h) {
		$adjusted_width = $w / $hm;
		$half_width = $adjusted_width / 2;
		$int_width = $half_width - $w_height;
		imagecopyresampled($dimg,$simg,-$int_width,0,0,0,$adjusted_width,$nh,$w,$h);
	} elseif(($w <$h) || ($w == $h)) {
		$adjusted_height = $h / $wm;
		$half_height = $adjusted_height / 1.2;
		$int_height = $half_height - $h_height;
		imagecopyresampled($dimg,$simg,0,-$int_height,0,0,$nw,$adjusted_height,$w,$h);
	} else {
		imagecopyresampled($dimg,$simg,0,0,0,0,$nw,$nh,$w,$h);
	}
	header('Content-type: image/jpeg');
	imagejpeg($dimg,"",100);
}
?>

Ich wäre echt sehr dankbar für Ideen oder Lösungsvorschläge...
 
Zuletzt bearbeitet:
Hi,

Code:
header("location: download2.php?".$_SERVER['QUERY_STRING']."/".$_GET['bild']);

so hängt man aber keine URL-Parameter an. Schau Dir testhalber mal mit echo an, was dabei herauskommt...
Wozu überhaupt dieses ganze Umgeleite. Zumindest bei diesen beiden Dateien ist das doch völlig unnötig.

PHP:
//header("Content-Disposition: attachement; filename=\"wallpaper.jpg\"");

Wenn Du aus dem "attachement" ein "inline" machst, den "filename" entsprechend setzt, sollten die gängigen Browser das verarbeiten, wenn Du diesen Header sendest.

Sowas sollte (D)ein Webprogrammierer aber zumindest herausbekommen können, wenn er's nicht weiß...

LG
 
Hallo zusammen,

Ich habe die Seiten prgrammiert und danke euch für die Lösungsvorschläge.

Das mit dem inline hatte ich natürlich auch schon probiert, aber leider ohne Erfolg.
Beide Browser IE und FF zeigen weiterhin den Dateinamen download2.php an.

Aus einem anderen Forum bin ich darauf gestossen, den Dateinamen in der URL mit:
URL/Query_string/bilddateiname.jpg zu übergeben. Deshalb die etwas spezielle URL. Leider hat auch das nicht funktioniert.

Beim Forschen nach dem "Content-Disposition: inline" bin ich immer wieder darauf gestossen, dass es damit Probleme gibt.

Hat vielleicht jemand Erfahrung damit?
 
Wow das ging aber schnell. Besten Dank.

Ich habe das auch probiert und jetzt so drin:

PHP:
header('Content-type: image/jpeg');
header("Content-Disposition: inline; filename=wallpaper.jpg");
imagejpeg($dimg,"",100);

Aber leider ohne Erfolg. Bei mir zeigt es beim Download immer noch download.php an.
 
Hi,

wird das Bild denn auch neu geladen und nicht aus dem Cache geholt? Bei mir funktioniert das nämlich wie gesagt tadellos. Häng probehalber mal einen Timestamp an die URL.

LG

Edit: Tut's doch:
 

Anhänge

  • screen_wallpaper.jpg
    screen_wallpaper.jpg
    158 KB · Aufrufe: 26
Zuletzt bearbeitet:
Danke. Ich habe nun auf verschiedenen Browsern getestet. Cache geleert und zum Teil auf Umgebungen wo die Seite noch nie offen war.

Funktioniert auf folgenden Browsern:
Safari und FireFox auf MAC.
Opera und Chrome auf Windows.

Auf dem IE und FireFox auf Windows funktioniert das "inline" nicht.
 
Hi,

unter Windows (Vista) habe ich erfolgreich IE7 und FF2 getestet. Außerdem unter Linux FF2 und Opera 9.

DaveThuet hat gesagt.:
Auf dem IE und FireFox auf Windows funktioniert das "inline" nicht.

Und das äußert sich wie (das ist nämlich nur eine Interpretation deinerseits...)? Installier mal einen Headersniffer und schau, was da wirklich gesendet wird.

Übrigens ist es gar nicht nett, gleich den kompletten Code wieder zu entfernen. Wenn da irgendwas Sicherheitsrelevantes drin war, hättest Du ja genau den Teil entfernen können. Das ist hier keine 1:1 Support-Hotline, von den Themen sollen alle lernen können!

LG
 
Übrigens ist es gar nicht nett, gleich den kompletten Code wieder zu entfernen. Wenn da irgendwas Sicherheitsrelevantes drin war, hättest Du ja genau den Teil entfernen können. Das ist hier keine 1:1 Support-Hotline, von den Themen sollen alle lernen können!

Das Löschen habe ich der unwissende "Dave" getätigt, sorry, habe es nun wieder eingefügt und hoffe die wichtigen und sicherheitsrelevanten Worte mit XXX gedeckt zu haben. :(
 
Hi,

Du hättest auch ruhig ganze Codeteile rausnehmen können. Für das Problem ist doch z.B. nicht wichtig, was für Abfragen Du da noch machst, oder dass das Bild noch skaliert wird. Hauptsache man kann noch erkennen worum es ursprünglich ging...

Und ist das Problem jetzt erledigt?

LG
 
Zurück