Просмотр полной версии : изменение размеров изображения
есть функция для изменение размеров изображений она находится внутри кода для загрузки файлов через flash. но на выходе не jpeg, а строка (вместо картинки кракозябры). как исправить?
в функцию масштабирования я написал
header("Content-type: image/jpeg");но php пишет, что заголовки уже добавлены.
Заголовки должны передаваться прежде всех данных.
Попробуй header добавить повыше... =)
должно помочь
пробовал. то же самое. flash ведь сразу передает header в методе upload(и зменить его нельзя). может в этом все дело?
может. но я как-то не много запутался. У Вас jpeg выдает php скрипт, правильно? и то что выдает скрипт, вы хотите отобразить во флеш?
именно! но пока я застрял на этапе генерирования jpg.
чтобы не мучатся. код в студию =)
swf:
uploadURL = new URLRequest("http://zzz/upload.php");
var email_data:String = "name=" + nam.text + "&email=" + email.text + "&message=" + msg.text;
var email_vars:URLVariables=new URLVariables(email_data);
uploadURL.data=email_vars;
uploadURL.method=URLRequestMethod.POST;
uploadURL.data=email_vars;
file.upload(uploadURL)
PHP:
<?php
$receiver = "zzz@zzz.com";
$subject = "zzz";
$headers = "From: " . $_POST["name"] ." "."<" . $_POST["email"] .">\r\n";
$headers .= "Reply-To: " . $_POST["email"] . "\r\n";
$headers .= "Return-path: " . $_POST["email"];
$ruheaders = iconv("UTF-8","windows-1251","$headers");
$filename = $_FILES["Filedata"]["name"];
$rufilename = iconv("UTF-8","windows-1251","$filename");
$filetmpname = $_FILES["Filedata"]["tmp_name"];
$fileType = $_FILES["Filedata"]["type"];
$fileSizeMB = ($_FILES["Filedata"]["size"] / 1024 / 1000);
$message = $_POST["checkbox"]."\r\r".$_POST["message"];
$rumessage = iconv("UTF-8","windows-1251","$message")."\n\n"."image size: ".round ($fileSizeMB, 2) ." mb"."\n"."http://nicephoto/images/"."$rufilename";
mail($receiver, $subject, $rumessage, $ruheaders);
if(move_uploaded_file($_FILES["Filedata"]["tmp_name"], "images/".$newfilename))
{
echo "answer=ok";
}
else
{
echo "answer=error";
}
function imageResize($outfile,$infile,$neww,$newh,$quality)
{
$im=imagecreatefromjpeg($infile);
$k1=$neww/imagesx($im);
$k2=$newh/imagesy($im);
$k=$k1>$k2?$k2:$k1;
$w=intval(imagesx($im)*$k);
$h=intval(imagesy($im)*$k);
$im1=imagecreatetruecolor($w,$h);
imagecopyresampled($im1,$im,0,0,0,0,$w,$h,imagesx($im),imagesy($im));
imagejpeg($im1,$outfile,$quality);
imagedestroy($im);
imagedestroy($im1);
}
imageResize("","images/$rufilename",640,240,75);
?>
так вообще не происходит никакого преобразования. если же в последней строчке PHP файла вместо images/$rufilename подставить имя уже существующего изображения и просто выполнить PHP файл в браузере - вылетают кракозябры. а с header, еще и ошибка отправки заголовка.
мдааааа. С флешем не разбирался. Но по крайне мере стало понятно,почему у Вас php не правильно работает.
Постоянно пхп выплевывает нотисы и варнинги, кроме этого после if else выплевывается текст загрузилось или нет,понятно,что картинки не получится.... +другие ошибки.
Вот,что в итоге с моими комментами
<?php
$receiver = "zzz@zzz.com";
$subject = "zzz";
$newfilename = "1.jpg"; // не нашел откуда это береться, поэтому добавил сам.
$headers = "From: " . $_POST["name"] ." "."<" . $_POST["email"] .">\r\n";
$headers .= "Reply-To: " . $_POST["email"] . "\r\n";
$headers .= "Return-path: " . $_POST["email"];
$ruheaders = iconv("UTF-8","windows-1251","$headers");
$filename = $_FILES["Filedata"]["name"];
$rufilename = iconv("UTF-8","windows-1251","$filename");
$filetmpname = $_FILES["Filedata"]["tmp_name"];
$fileType = $_FILES["Filedata"]["type"];
$fileSizeMB = ($_FILES["Filedata"]["size"] / 1024 / 1000);
$message = $_POST["checkbox"]."\r\r".$_POST["message"];
$rumessage = iconv("UTF-8","windows-1251","$message")."\n\n"."image size: ".round ($fileSizeMB, 2) ." mb"."\n"."http://nicephoto/images/"."$rufilename";
mail($receiver, $subject, $rumessage, $ruheaders);
//при проверке пришлось убить, локально почтовик не стоит. Если что обрати внимание...
if(move_uploaded_file($_FILES["Filedata"]["tmp_name"], "images/".$newfilename))
{
// echo "answer=ok"; ошибка тут и тут
}
else
{
// echo "answer=error"; и тут
}
/* ну в смысле того, пхп выплевывает....
лучше наверно вместо всего "if" написать
copy($_FILES["Filedata"]["tmp_name"], "images/".$newfilename) or die("НЕ СКОПИРОВАЛОСЬ И УМЕРЛО ")
*/
function imageResize($outfile,$infile,$neww,$newh,$quality)
{
$im=imagecreatefromjpeg($infile);
$k1=$neww/imagesx($im);
$k2=$newh/imagesy($im);
$k=$k1>$k2?$k2:$k1;
$w=intval(imagesx($im)*$k);
$h=intval(imagesy($im)*$k);
$im1=imagecreatetruecolor($w,$h);
imagecopyresampled($im1,$im,0,0,0,0,$w,$h,imagesx($im),imagesy($im));
imagejpeg($im1,$outfile,$quality);
imagedestroy($im);
imagedestroy($im1);
}
// imageResize("","images/$rufilename",640,240,75); зачем тут images? если в функции копирования images/".$newfilename
//.....
imageResize("","images/$newfilename",640,240,75);
?>
duhowka, огромное вам спасибо! а как теперь уменьшенное изображение скопировать в ту же (или другую) папку? мне это нужно для загрузки этой копии во flash и ее отображения.
Все зависит от того, что Вы хотите получить от скрипта на выходе.
Если просто картинку на выходе, для вставки в флеш,то все как надо.
Если просто записать ресайзнутую картинку куда-либо, то
imageResize("$path_and_name_res_pic","images/$newfilename",640,240,75); , но при этом скрипт вообще ничего не выдаст.
Если хотите получить и сейв и картинку в окне,то вызовите с аргументом и без,т.е
imageResize("$path_and_name_res_pic","images/$newfilename",640,240,75);
imageResize("","images/$newfilename",640,240,75);
работает. но как быть с не jpg? как их можно уменьшить? может, просто менять расширение на jpg?
Просто поменять расширение не получится,так как используются разные алгоритмы сжатия.
Поищи в сети или напиши сам, функции или классы по ресайзу других типов и исходя уже от mime типа или(и) расширения, используй нужную функцию(класс)
можно ли передать значение $newfilename внутрь функции imageResize?
попробовал, получилось ).
возникла другая проблема. после загрузки изображения не удается узнать его имя. делаю так:
по окончании загрузки во флэше гружу скрипт загрузки и трассирую переменную имени файла:
$fname = $filename;
echo "zzz=$fname";
но возвращается пустая строка. при записи имени файла в лог во время выполнения скрипта - то же самое.
При этом функция ресайза и соответственно вывода на экран вызывается?
Если да,попробуйте без нее.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.