При закачки картинок, переименовать, ограничить размер, конвертировать в *.jpg

gamburg

Новичок
При закачки картинок, переименовать, ограничить размер, конвертировать в *.jpg

Привет форумчане, посмотрел форум, нашёл только 2005 года сообщения и то не полностью.
Как при закачки картинок на сервер, переименовать, ограничить размер, создать две картинки из оригинала - маленькую и большую, конвертировать в *.jpg, удалить оригинальный файл.

Навеял вопрос - Fancy Uploader, только он уж навороченный слишком, Mootools, Ajax, Flash

Хотелось бы так, человек загружает картинку, а обработка происходит в фоновом режиме и только средствами PHP
 

gamburg

Новичок
в GD (после недавней статьи ув. The employer) видимо вобще всё можно делать с изображениями - но разобраться в нём полностью видимо не для меня, да и время не позволяет, ищу более простое решение, вот тут нашёл немного изменённый Fancy *ttp://goldblog.com.ua/2009/07/ajax-upload/comment-page-1/#comment-5839
 

soines

Новичок
Ну нашел и молодец, вопрос то в чем?
Разобраться в гд займет полчаса, примеров полно в сети.
 

gamburg

Новичок
Автор оригинала: soines
Ну нашел и молодец, вопрос то в чем?
Разобраться в гд займет полчаса, примеров полно в сети.
Вопрос в теме

Можно по частям - например:
1. Как переименовать загружаемый графический файл
2. Как переконвертировать *.gif, *.png в *.jpg
3. Как из оригинального файла сделать два файла с задаваемыми размерами
4. Как потом удалить оригинальный графический файл
 

soines

Новичок
1. Умеешь файлы загружать? Загрузка графических файлов от загрузки текстовых абсолютно ничем не отличается.
2, 3. http://php.net/manual/en/book.image.php - в одной из функций есть пример твоей задачи
4. http://ru.php.net/manual/en/ref.filesystem.php
 

gamburg

Новичок
Автор оригинала: soines
1. Умеешь файлы загружать? Загрузка графических файлов от загрузки текстовых абсолютно ничем не отличается.
2, 3. http://php.net/manual/en/book.image.php - в одной из функций есть пример твоей задачи
4. http://ru.php.net/manual/en/ref.filesystem.php
1. Ты не внимательно прочитал
За 2,3,4 спасибо
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Не надо тебе ничего переименовывать, надо создать файл с новым именем, уникальным. Как это сделать - есть примеру на форуме и в гугле.
 

Вурдалак

Продвинутый новичок
gamburg, какой конкретно файл ты переименовывать собрался? Загруженный файл лежит в директории для временных файлов и ничем, кроме move_uploaded_file(), ты его «трогать» не должен.
 

gamburg

Новичок
Автор оригинала: Вурдалак
gamburg, какой конкретно файл ты переименовывать собрался? Загруженный файл лежит в директории для временных файлов и ничем, кроме move_uploaded_file(), ты его «трогать» не должен.
Да он лежит там, но это оригинальный файл и из него надо создать 2 файла с новыми уникальными именами и размерами, переконвертировать, и потом удалить. На примере по моей ссылке показан кусок кода и он видимо самостоятельно неработает, а я бы хотел сделать функцию которая всё бы это делала самостоятельно и сразу

PHP:
  //формируем имя уникальное файла
  $apend=date('YmdHis').rand(100,1000).'.jpg';
  move_uploaded_file($_FILES['Filedata']['tmp_name'],$apend);
 $return['src'] = '../../upload/'.$apend;
// $outfile -  путь к файлу, который получится после преобразования
// $neww - ширина в px, к которой преобразуем
// $infile - путь к файлу, который преобразуем
// $quality - качество изображения в %
// вызов функции выглядит примерно так:
//
// imageresize("images/out_image.jpg",150,"uploads/image.jpg",100);
//
function imageresize($outfile,$neww,$infile,$quality) {

$im=imagecreatefromjpeg($infile);

$newh=$neww*imagesy($im)/imagesx($im);

$im1=imagecreatetruecolor($neww,$newh);
imagecopyresampled($im1,$im,0,0,0,0,$neww,$newh,imagesx($im),imagesy($im));
if($neww>=140)//добавляем водяной знак на изображения больше среднего размера
{              //путь к изображению с водяным знаком
$image_logo = "../../../images/logo.png";
$im_logo = imagecreatefrompng($image_logo);
imagecopy($im1, $im_logo, 0, 0, 0, 0, 150, 25);
}
imagejpeg($im1,$outfile,$quality);
imagedestroy($im);
imagedestroy($im1);
}
//удаляем исходный файл
if(@file_exists('upload/file.jpg'))
{
unlink('upload/file.jpg');
}
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
gamburg
открой для себя http://ru.php.net/manual/en/function.uniqid.php

На примере по моей ссылке показан кусок кода и он видимо самостоятельно неработает
эпично, ты не можешь понять работает код или нет?
 

gamburg

Новичок
Автор оригинала: c0dex
gamburg
открой для себя http://ru.php.net/manual/en/function.uniqid.php


эпично, ты не можешь понять работает код или нет?
Я немогу понять самостоятельный ли он

Вот весь код:

PHP:
<?php
/**
 * Swiff.Uploader Example Backend
 *
 * This file represents a simple logging, validation and output.
 *  *
 * WARNING: If you really copy these lines in your backend without
 * any modification, there is something seriously wrong! Drop me a line
 * and I can give you a good rate for fancy and customised installation.
 *
 * No showcase represents 100% an actual real world file handling,
 * you need to move and process the file in your own code!
 * Just like you would do it with other uploaded files, nothing
 * special.
 *
 * @license		MIT License
 *
 * @author		Harald Kirschner <mail [at] digitarald [dot] de>
 * @copyright	Authors
 *
 */


/**
 * Only needed if you have a logged in user, see option appendCookieData,
 * which adds session id and other available cookies to the sent data.
 *
 * session_id($_POST['SID']); // whatever your session name is, adapt that!
 * session_start();
 */

// Request log

/**
 * You don't need to log, this is just for the showcase. Better remove
 * those lines for production since the log contains detailed file
 * information.
 */

$result = array();

$result['time'] = date('r');
$result['addr'] = substr_replace(gethostbyaddr($_SERVER['REMOTE_ADDR']), '******', 0, 6);
$result['agent'] = $_SERVER['HTTP_USER_AGENT'];

if (count($_GET)) {
	$result['get'] = $_GET;
}
if (count($_POST)) {
	$result['post'] = $_POST;
}
if (count($_FILES)) {
	$result['files'] = $_FILES;
}

// we kill an old file to keep the size small
if (file_exists('script.log') && filesize('script.log') > 102400) {
	unlink('script.log');
}

$log = @fopen('script.log', 'a');
if ($log) {
	fputs($log, print_r($result, true) . "\n---\n");
	fclose($log);
}


// Validation

$error = false;

if (!isset($_FILES['Filedata']) || !is_uploaded_file($_FILES['Filedata']['tmp_name'])) {
	$error = 'Invalid Upload';
}

/**
 * You would add more validation, checking image type or user rights.
 *

if (!$error && $_FILES['Filedata']['size'] > 2 * 1024 * 1024)
{
	$error = 'Please upload only files smaller than 2Mb!';
}

if (!$error && !($size = @getimagesize($_FILES['Filedata']['tmp_name']) ) )
{
	$error = 'Please upload only images, no other files are supported.';
}

if (!$error && !in_array($size[2], array(1, 2, 3, 7, 8) ) )
{
	$error = 'Please upload only images of type JPEG, GIF or PNG.';
}

if (!$error && ($size[0] < 25) || ($size[1] < 25))
{
	$error = 'Please upload an image bigger than 25px.';
}
*/


// Processing


  //формируем имя уникальное файла
  $apend=date('YmdHis').rand(100,1000).'.jpg';
  move_uploaded_file($_FILES['Filedata']['tmp_name'],$apend);
 $return['src'] = '../../upload/'.$apend;

 //or

  //$return['link'] = YourImageLibrary::createThumbnail($_FILES['Filedata']['tmp_name']);



if ($error) {

	$return = array(
		'status' => '0',
		'error' => $error
	);

} else {

	$return = array(
		'status' => '1',
		'name' => $_FILES['Filedata']['name']
	);

	// Our processing, we get a hash value from the file
	//$return['hash'] = md5_file($_FILES['Filedata']['tmp_name']);

	// ... and if available, we get image data
	$info = @getimagesize($_FILES['Filedata']['tmp_name']);

	if ($info) {
		$return['width'] = $info[0];
		$return['height'] = $info[1];
		$return['mime'] = $info['mime'];
	}

    //echo '<input type=image src="../../upload/'.$_FILES["Filedata"]["name"].'" name="sub">';
/*	function resize_image($image,$width,$height,$name,$width1,$height1){
		$temp= @imagecreate($width, $height) or die("Cannot Initialize new GD image stream");

		$new_image = ImageCreateFromJpeg($image) or die("ImageCreateFromJpeg-жопа");

		//$imagedata = getimagesize($image);
		imagecopyresampled($temp, $new_image, 0, 0, 0, 0, $width, $height, $width1, $height1);
         $new_imagge="../../../upload/min-".$name;
		imagejpeg($temp, $new_imagge, 100); //== число 100 указывает на процент качества изображения
	}*/


    // $outfile -  путь к файлу, который получится после преобразования
    // $neww - ширина в px, к которой преобразуем
    // $infile - путь к файлу, который преобразуем
    // $quality - качество изображения в %
    // вызов функции выглядит примерно так:
    //
    // imageresize("images/out_image.jpg",150,"uploads/image.jpg",100);
    //
	function imageresize($outfile,$neww,$infile,$quality) {

    $im=imagecreatefromjpeg($infile);


    $newh=$neww*imagesy($im)/imagesx($im);

    $im1=imagecreatetruecolor($neww,$newh);
    imagecopyresampled($im1,$im,0,0,0,0,$neww,$newh,imagesx($im),imagesy($im));
       if($neww>=140)//добавляем водяной знак на изображения больше среднего размера
       {              //путь к изображению с водяным знаком
    	$image_logo = "../../../images/logo.png";
    	$im_logo = imagecreatefrompng($image_logo);
    	imagecopy($im1, $im_logo, 0, 0, 0, 0, 150, 25);
    	}
    imagejpeg($im1,$outfile,$quality);
    imagedestroy($im);
    imagedestroy($im1);
    }

    $imagge='../../../upload/'.$apend;
    $imagge_out='../../../upload/min-'.$apend;
    $return['min']=$imagge_out;
    $return['photo_name']=$apend;
	imageresize($imagge_out,40,$imagge,75);

    $imagge_out='../../../upload/medium-'.$apend;
    imageresize($imagge_out,150,$imagge,100);

    $imagge_out='../../../upload/max-'.$apend;
    imageresize($imagge_out,500,$imagge,100);

    //удаляем исходный файл
    if(@file_exists('../../../upload/'.$apend))
    {
    unlink('../../../upload/'.$apend);
    }
	/*
    resize_image($imagge,50,50,$_FILES['Filedata']['name'],$return['width'],$return['height']);*/
      // echo '<input type=image src="../../upload/min-'.$_FILES["Filedata"]["name"].'" name="sub">';
}


// Output

/**
 * Again, a demo case. We can switch here, for different showcases
 * between different formats. You can also return plain data, like an URL
 * or whatever you want.
 *
 * The Content-type headers are uncommented, since Flash doesn't care for them
 * anyway. This way also the IFrame-based uploader sees the content.
 */

if (isset($_REQUEST['response']) && $_REQUEST['response'] == 'xml') {
	// header('Content-type: text/xml');

	// Really dirty, use DOM and CDATA section!
	echo '<response>';
	foreach ($return as $key => $value) {
		echo "<$key><![CDATA[$value]]></$key>";
	}
	echo '</response>';
} else {
	// header('Content-type: application/json');

	echo json_encode($return);
}

?>
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Ajax загрузка файлов тебе зачем? Выкинь свой скрипт и напиши тот, который просто принимает и обрабатывает файл. Кладет его в нужную папку. Потом добавь туда поддержку графических форматов уже.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
c0dex
Да не может он.
Это очередной попрошайка.
 

gamburg

Новичок
Автор оригинала: c0dex
Ajax загрузка файлов тебе зачем? Выкинь свой скрипт и напиши тот, который просто принимает и обрабатывает файл. Кладет его в нужную папку. Потом добавь туда поддержку графических форматов уже.
Это не мой скрипт, я и хочу оставить только самое нужное, и прошу помочь отсеять всё не нужное
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Слона, как говорил мой друг, надо есть по частям. Приступай.
 

gamburg

Новичок
Автор оригинала: Mr_Max
c0dex
Да не может он.
Это очередной попрошайка.
Уважаемый, еслиб я мог сам во всём разобраться, меня бы здесь и не было бы
Попрошайка - ну не подходит такая формулировка, если можете за меня всё сделать, могу немного и отблагодарить. Только тогда не понятно как тогда научиться?

-~{}~ 07.07.10 16:27:

Автор оригинала: c0dex
Слона, как говорил мой друг, надо есть по частям. Приступай.
Спасибо - начну отрезать по частям
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Да не надо ничего отрезать, я тебе написал что тебе нужно сделать, если ты действительно хочешь научиться.

Сделай простую загрузку файлов. Функцию, которая будет просто брать файл и класть в нужное место.
 
Сверху