Работа с изображением функция imagejpeg()

yyyurik

Новичок
Подскажите как сделать, чтобы этот код работал не только с jpeg но и с gif, png, bmp?
на сколько я понимаю нужно прописать строки
PHP:
$im=imagecreatefromgif($infile);
$im=imagecreatefrompng($infile);
$im=imagecreatefromjpeg($infile);
Только Вот как это правильно вставить в функцию? Подскажите пожалуйста...
 

yyyurik

Новичок
Можно как нибудь поподробней?
Я загружаю изображение на сервер и ужимаю его, наконец-то получилось сделать, вставкой в функцию следующих параметров.
PHP:
$type=$_FILES["filename"]["type"];
if ($type == "image/png") {$im=imagecreatefrompng($infile);}
if ($type == "image/jpeg") {$im=imagecreatefromjpeg($infile);}
if ($type == "image/gif") {$im=imagecreatefromgif($infile);}
Если можно объясни как с помощью getimagesize можно сделать?
Функция getimagesize() определяет размер изображения GIF, JPG, PNG, SWF, PSD, TIFF или BMP и возвращает размеры, тип файла и высоту/ширину текстовой строки, используемой внутри нормального HTML-тэга IMG. Но как ее применить?
 

x-yuri

Новичок
просто $_FILES["filename"]["type"] указывается браузером, т.е. ему нельзя доверять => используй для этого [m]getimagesize[/m]

p.s. я бы использовал else if
а может даже так
PHP:
var $match = array( 'image/png'  => 'imagecreatefrompng',
                   'image/jpeg' => 'imagecreatefromjpeg',
                   ... );
$func = $match[ $type ];
$im = $func( $infile );
 

yyyurik

Новичок
Хороший вариант, я сделал
PHP:
 if ($im == true)
таким образом тоже можно:)
И еще вопрос, вдруг пользователь захочет занести файл где будут использоваться русские буквы? У меня информация заносится в базу и потом выводится на сайте, т.е. если будут русские буквы картинка не покажется.. как можно обойти данное неудобство?
 

Фанат

oncle terrible
Команда форума
что за файл и в чем вред русских букв. подробнее.
и какая связь с предыдущим вопросом
 

yyyurik

Новичок
Изображение ведь можно загрузить вида "Вася.jpg" затем в базу занесется "up/Вася.jpg" и при выводе изображения <img src="up/Вася.jpg"> - также ведь не покажется... вот я и незнаю как обойти это.. как вариант полностью поменять название на рандом, но мне это не очень нравится:( Может есть пути решения вопроса по проще... (поиском пользовался, но нужного не нашел, может что не так прописывал).
-----------
Кажись понял - регулярные выражения?:) сейчас буду изучать..
 

Фанат

oncle terrible
Команда форума
понятно. речь об ИМЕНИ файла
ну, Вася.jpg выведется нормально.
но лучше, все-таки, чтобы в именах русских букв не было. можно менять на случайное имя, можно тренслитерировать
 

yyyurik

Новичок
-можно тренслитерировать
Вот скорее такой вариант, только как правильно это все оформить?...
 

Фанат

oncle terrible
Команда форума
[m]strtr[/m]
но еще регом пройти не помешает, чтобы убрать все остальное
 

yyyurik

Новичок
Автор оригинала: *****
[m]strtr[/m]
но еще регом пройти не помешает, чтобы убрать все остальное
ооо, большое спасибо, в данном случае эта функция подойдет куда лучше:)
 

tashkentchi

Новичок
Еще проверка нужна. Если уже существует Vasia.jpg и заливается Vasia.jpg, то сохранять последний как Vasia_2.jpg
 

yyyurik

Новичок
Я сделал немного по другому через рандом в 15000 комбинаций и вставил перед названием фильма:) Не получилось найти как можно проверку сделать... Если подскажешь буду очень благодарен и скорее всего изменю:)
 

tashkentchi

Новичок
ну вот переделай под свою задачу:

PHP:
    public static function createFilePathFromUrl($url, $ext = 'bb')
    {
        $max_len = 255;
        $ext = '.' . $ext;
        $ext_len = strlen($ext);
        $path = substr('./pages' . $url, 0, $max_len - $ext_len) . $ext;
        $n = 0;
        do {
            if ($is = is_file($file)) {
                if (! $n) {
                    $file = substr($url, 0, $max_len - $ext_len - 2);
                } elseif (strlen($url) == $max_len) {
                    $file = substr($url, 0, $max_len - strlen($n + 1) - $ext_len - 1);
                } else {
                    $file = substr($url, 0, strlen($url) - strlen($n) - $ext_len - 1);
                }
                $file .= '_' . ++$n . $ext;
            }
        } while ($is);
        return $path;
    }
 
Сверху