Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как можно уменьшить но сохранить пропорции
 
 автор: TanTaL91   (22.10.2008 в 08:06)   письмо автору
 
 

Вот возник вопрос. Как можно заталкаться картинку в 300х300 окно и что бы она залезла в него, но сохранила пропорции (просто уменьшилась но не вкоем случае не портились пропорции).

  Ответить  
 
 автор: mechanic   (22.10.2008 в 08:26)   письмо автору
 
   для: TanTaL91   (22.10.2008 в 08:06)
 

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

иначе, юзать скрипт, в котором проверять, что больше, ширина или высота, и бОльшему свойству присваивать те же 300px

  Ответить  
 
 автор: TanTaL91   (22.10.2008 в 10:18)   письмо автору
 
   для: mechanic   (22.10.2008 в 08:26)
 

В чем и загвоздка что всегда разные картинки. То ширина больше то высота...

  Ответить  
 
 автор: elenaki   (22.10.2008 в 11:10)   письмо автору
 
   для: TanTaL91   (22.10.2008 в 10:18)
 

этот файл назвать view_picture.html и поместить в ту же папку, где картинки

<style type=text/css><!--
body,img,table,tr,td{margin:0px;padding:0px;border:0px;text-align:center;vertical-align:middle}
--></style>

<body onLoad="if(d.images['i'])adjustWin()" leftmargin=100 topmargin=100 marginwidth=100 marginheight=100>
<table width=100% height=100% cellpadding=0 cellspacing=0 border=0>
<tr><td><script>
var d=document
resizeTo(400,300)
function adjustWin(){resizeTo(d.images['i'].width+30,d.images['i'].height+47)}

var l=location.search
if(l.length>1){
var imgPath=unescape(location.search.substring(1,location.search.length));
var im=new Image
im.src=imgPath
d.write('<img name=i src="'+imgPath+'">')
}
else {d.write('No picture')}
</script></td></tr></table>


в файл с превьюшками вставить эту фунцкию
<script>
function imgWin2(img)
{
var wn=window.open('images/view_picture.html?'+escape(img),'win','resizable,width=400,height=200,screenX=0,screenY=0,top=100,left=100')
wn.focus()
return false
}
</script>

и открывать окно, которое будет подгоняться под размер картинки так
onClick="return imgWin2('<?=$image?>')"

  Ответить  
 
 автор: PAT   (22.10.2008 в 12:05)   письмо автору
 
   для: TanTaL91   (22.10.2008 в 10:18)
 

Для того, чтобы картинку, имеющую некую прямоугольную форму (с разными шириной и высотой)
"загнать" в квадрат (имеющий равновеликие стороны) без искажений в пропорциях, эту картинку по-любому
нужно будет по одной стороне обрезать.

Самый простой вариант - обрезка справа или снизу.
Реализуется так:
1. Рисуем <DIV> с жесткими размерами 300х300 и с запретом на скролл.
2. Помещаем в этот <DIV> тег <IMG> с изначальной невидимостью.
3. По окончании загрузки картинки (ONLOAD) определяем - какая из сторон картинки (высота или
ширина) фактически меньше.
4. Меньшую сторону делаем равной 300 пикселей и картинку после этого делаем видимой.

Код будет таким:
<div style="border: 1px solid black; width: 300px; height: 300px; overflow: hidden">
<img src="URL_картинки" style="visibility: hidden"
onload="with (this) {if (offsetHeight < offsetWidth) style.height = '300px'; else style.width = '300px'; style.visibility = 'visible'}"></div>
PS. обратите внимание на то, что закрывающий тег </div> должен писаться СЛИТНО с последним
символом тега <img> - чтобы снизу в DIV'e не появлялся зазор.
PS2. бордер у DIV'a (в коде выделен жирно) вполне можете убрать, если он вам не нужен.

Разумеется, возможны и более сложные варианты.
Например, можно тег <IMG> спозиционировать относительно DIV'a и обрезать картинку
равными частями снизу/сверху (или слева/справа).

  Ответить  
 
 автор: TanTaL91   (23.10.2008 в 07:46)   письмо автору
 
   для: PAT   (22.10.2008 в 12:05)
 

картинки бываютне только горизантальными но и вертикальными...

  Ответить  
 
 автор: PAT   (23.10.2008 в 09:46)   письмо автору
 
   для: TanTaL91   (23.10.2008 в 07:46)
 

Вы б сначала проверили код в действии - на любого типа картинках...

[поправлено модератором]

  Ответить  
 
 автор: TanTaL91   (23.10.2008 в 23:12)   письмо автору
 
   для: PAT   (23.10.2008 в 09:46)
 

Мне полноценая картинка нужна...

[поправлено модератором]

  Ответить  
 
 автор: PAT   (24.10.2008 в 01:07)   письмо автору
 
   для: TanTaL91   (23.10.2008 в 23:12)
 

Прямоугольную картинку без искажения пропорций вписать в квадрат без обрезания ВПОЛНЕ МОЖНО.
Только вы получите или так (если исходная ширина картинки больше её высоты):
+---------------------------+
|                           |
|                           |
|                           |
|         картинка          |
|                           |
|                           |
|                           |
|                           |
+---------------------------+
|                           |
|       пустое место        |
|                           |
+---------------------------+
или так (если, наоборот, высота больше ширины)
+---------------------+-----+
|                     |  п  |
|                     |  у  |
|                     |  с  |
|                     |  т  |
|                     |  о  |
|                     |  е  |
|       картинка      |     |
|                     |  м  |
|                     |  е  |
|                     |  с  |
|                     |  т  |
|                     |  о  |
+---------------------+-----+

Я вам предложил вариант, когда ЛЮБАЯ по размеру картинка станет КВАДРАТНОЙ, что вы и запрашивали в исходном своём сообщении. Для этого картинку по МЕНЬШЕЙ стороне нужно довести до 300 пикселей, а лишнее у другой (бОльшей) стороны обрезать.

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

Нет проблем.

В предыдущем коде поменяйте местами offsetWidth и offsetHeight.
И будет вам полное счастье с необрезанными картинками (но с пустыми местами).

[поправлено модератором]

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования