Salvare Imagine Php cu Extensie .jpg

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
MelecaCristian
Mesaje:176

Salvare Imagine Php cu Extensie .jpg

Buna am o problema cu un generator de imagini si mai exact este vorba de o imagine creata de php.
de ex :
fbcover.netne.net/txt.php

Dar cand dau save as imi apare ca download format-ul txt.php in loc de txt.jpg cum asi putea sa ii modific extensia fara a interveni ei ca la salvare in loc de php sa scrie jpg.

Multumesc frumos!
„Uneori o greşeală poate fi tot ce este necesar pentru o realizare valoroasă.” — Henry Ford

MarPlo Mesaje:4343
Cred ca e undeva in codul acelui generator de imagini locul unde se creaza numele fisierului, si poate fi adaugata /modificata extensia.
Mai mult, trebuie vazut in cod daca e asa.

MelecaCristian Mesaje:176
aaaaa te rog scuzama ca nu am lasat codul :
Imaginea de la : $stamp este cea mica cu url-ul si cadrul albatru
$im este imaginea mare ...

eu am nevoie de rezultatul acesteor 2 imagina sa se salveze in extensia .jpg rezultatul il poti vizualiza in postul de mai sus ...

Cod: Selectaţi tot

<?php
// Load the stamp and the photo to apply the watermark to
$stamp = imagecreatefrompng('https://lh6.googleusercontent.com/-uC_SLcVBjbQ/T7DmAmSLaNI/AAAAAAAAD0c/xChsHROTLgE/s229/I-Am-Nobody-Facebook-Timeline-Cover-Funny-Text-Facebook-Covers.png');
$im = imagecreatefromjpeg('http://coverjunction.s3.amazonaws.com/manual/low/colorful4.jpg');

// Set the margins for the stamp and get the height/width of the stamp image
$marge_right = 10;
$marge_bottom = 10;
$sx = imagesx($stamp);
$sy = imagesy($stamp);

// Copy the stamp image onto our photo using the margin offsets and the photo 
// width to calculate positioning of the stamp. 
imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp));

// Output and free memory
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
?>
„Uneori o greşeală poate fi tot ce este necesar pentru o realizare valoroasă.” — Henry Ford

MarPlo Mesaje:4343
Am testat link-ul, in Mozilla Firefox si Internet Explorer se salveaza cu extensia PNG, data de header() din cod, dar in Google Chrome se salveaza cu ".php", dupa numele ce apare in bara de adrese
Din asta inteleg ca e ceva ce depinde de browser, nu de script-ul php. Deoarece imaginea nefiind fizic salvata si preluata de pe server, ia nu are un nume al ei, ci e numele din browser, pe care il recunosc diferit.

In scriptul tau, imaginea e creata ca tip PNG, daca vrei JPG, acesta e codul, modificat pt. JPG. Dar la fel, depide de browser la Save As.

Cod: Selectaţi tot

<?php
// Load the stamp and the photo to apply the watermark to
$stamp = imagecreatefrompng('https://lh6.googleusercontent.com/-uC_SLcVBjbQ/T7DmAmSLaNI/AAAAAAAAD0c/xChsHROTLgE/s229/I-Am-Nobody-Facebook-Timeline-Cover-Funny-Text-Facebook-Covers.png');
$im = imagecreatefromjpeg('http://coverjunction.s3.amazonaws.com/manual/low/colorful4.jpg');

// Set the margins for the stamp and get the height/width of the stamp image
$marge_right = 10;
$marge_bottom = 10;
$sx = imagesx($stamp);
$sy = imagesy($stamp);

// Copy the stamp image onto our photo using the margin offsets and the photo
// width to calculate positioning of the stamp.
imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp));

// Output and free memory
header('Content-type: image/jpeg');
imagejpeg($im);
imagedestroy($im);
?>
O solutie ca sa se salveze cu extensia ".jpg" e ca intai sa salvezi imaginea pe server, apoi sa faci redirect la ea, pentru asta, inlocuieste codul:

Cod: Selectaţi tot

header('Content-type: image/jpeg');
imagejpeg($im);
imagedestroy($im);
Cu acesta:

Cod: Selectaţi tot

imagejpeg($im, 'dirimgs/nume.jpg');
imagedestroy($im);
header('Location: dirimgs/nume.jpg');
- "dirimgs" e directorul in care sa fie salvata imaginea. Daca serverul e pe sistem Unix/Linux, PHP trebuie sa aibe permisiuni CHMOD de scriere in acest director.

MelecaCristian Mesaje:176
Am facut cum ai spus tu si a functionat insa am incercat sa ii adaug o variabila pentru nu a fi nevoit sa creez cate un cod php pentru fiecare imagine dar imi da eroarea 404 ... ce nu am procedat bine imaginea mare doresc sa se schimbe :-S si mam gandit ca merge cu variabila get php

Cod: Selectaţi tot

<?php
// Load the stamp and the photo to apply the watermark to
$file = $_GET['file'];
$stamp = imagecreatefrompng('https://lh6.googleusercontent.com/-uC_SLcVBjbQ/T7DmAmSLaNI/AAAAAAAAD0c/xChsHROTLgE/s229/I-Am-Nobody-Facebook-Timeline-Cover-Funny-Text-Facebook-Covers.png');
$im = imagecreatefromjpeg('$file');

// Set the margins for the stamp and get the height/width of the stamp image
$marge_right = 10;
$marge_bottom = 10;
$sx = imagesx($stamp);
$sy = imagesy($stamp);

// Copy the stamp image onto our photo using the margin offsets and the photo 
// width to calculate positioning of the stamp. 
imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp));

// Output and free memory
imagejpeg($im, 'dirimgs/nume.jpg');
imagedestroy($im);
header('Location: dirimgs/nume.jpg');
?>
„Uneori o greşeală poate fi tot ce este necesar pentru o realizare valoroasă.” — Henry Ford

MarPlo Mesaje:4343
Cred ca returneaza eroare 404 fiindca face redirect la o pagina /adresa inexistenta.
Variabila $_GET['file'] preia din adresa URL a paginii accesate in browser valoarea data la "file".
De exemplu, la adresa: pagina.php?file=un_sir
$_GET['file'] va returna "un_sir" .
Probabil trebuie alte modificari. Incearca sa vezi ce date obtii, cu:

Cod: Selectaţi tot

 echo $_GET['file'];
 
Asa faci comparatie cu ce vroiai sa contina acea variabila, si iti poti da seama de eroare.
- dar sa adaugi doua slash-uri // in fata la header() sa nu-l mai execute pt redirect, ca sa vezi ce returneaza "echo".

keenbr Mesaje:44
Incerca un url rewrite in htaccess ;)