Что нового

[Математика] Как получить высоту и ширину .jpg картинки и смасштабировать ее ?

vaf

Новичок
Сообщения
190
Репутация
2
Добрый день уважаемые форумчане.
Решаю задачу по сортировке картинок по разрешению, подскажите пожалуйста, как получить ширину и высоту картинки ?

Зачем нужно:
допустим есть несколько картинок (6 шт)
pictures1.jpg размер 640x480
pictures2.jpg размер 740x400
pictures3.jpg размер 800x530
pictures4.jpg размер 320x320
pictures5.jpg размер 620x400
pictures6.jpg размер 1024x768
и есть определенная ширина куда мне это нужно запихать (в HTML) допусти 1000 пикселей

делим 1000 на количество картинок (6) получается ширина картинок 166px
нужно рассчитать высоту картинок в для ширины в 166px и отсортировать по высоте в порядке убывания

Буду благодарен если подскажите как получить высоту и ширину картинок ?
и как получить высоту картинок после масштабирования ?
Зачем мне это нужно ? чтобы автоматом формировать строку вида

<img src="/uploads/pictures6.jpg" width="166" /><img src="/uploads/pictures3.jpg" width="166" /><img src="/uploads/pictures2.jpg" width="166" /><img src="/uploads/pictures1.jpg" width="166" /><img src="/uploads/pictures5.jpg" width="166" /><img src="/uploads/pictures4.jpg" alt="" width="166" />

Заранее благодарен.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
vaf [?]
как получить высоту и ширину картинок
Код:

Можно так попробовать сделать.
Код:
#include <File.au3>
#include <Array.au3>
#include <GDIPlus.au3>

$sDir = 'W:\Dir_with_jpg_files'
$iW_all = 1000
$i_CountW = 6

$aJPG = _FileListToArray($sDir, '*.jpg', 1)
If @error Then Exit 13
;_ArrayDisplay($aJPG)
$iWnew = Int($iW_all / $i_CountW)
ConsoleWrite($iWnew & @LF)

_GDIPlus_Startup()
Dim $aNew[$aJPG[0] + 1][5] = [[0, 'W orig', 'H orig', 'W new', 'H new']]
For $i = 1 To $aJPG[0]
	For $j = 1 To 1
		$iErr = 1
		$hImage = _GDIPlus_ImageLoadFromFile($sDir & '\' & $aJPG[$i])
		If @error Then ExitLoop
		$iW_temp = _GDIPlus_ImageGetWidth($hImage)
		If @error Then ExitLoop
		$iH_temp = _GDIPlus_ImageGetHeight($hImage)
		If @error Then ExitLoop
		$iErr = 0
	Next
	_GDIPlus_ImageDispose($hImage)
	If $iErr Then ContinueLoop
	$aNew[0][0] += 1
	$aNew[$aNew[0][0]][0] = $aJPG[$i]
	$aNew[$aNew[0][0]][1] = $iW_temp
	$aNew[$aNew[0][0]][2] = $iH_temp
	$aNew[$aNew[0][0]][3] = $iWnew
	$aNew[$aNew[0][0]][4] = Int($aNew[$aNew[0][0]][3] * $aNew[$aNew[0][0]][2] / $aNew[$aNew[0][0]][1]);or
	;$aNew[$aNew[0][0]][4] = Ceiling($aNew[$aNew[0][0]][3] * $aNew[$aNew[0][0]][2] / $aNew[$aNew[0][0]][1])
Next
_GDIPlus_Shutdown()
ReDim $aNew[$aNew[0][0] + 1][5]
;_ArrayDisplay($aNew)
_ArraySort($aNew, 0, 1, 0, 4)
_ArrayDisplay($aNew)
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
получить высоту и ширину
Код:
Func _GDIPlus_GetImageSize($h_img)
   _GDIPlus_Startup()
   Local $hImg = _GDIPlus_ImageLoadFromFile($h_img)
   Local $Arr = _GDIPlus_ImageGetWidth($hImg) & '|' & _GDIPlus_ImageGetHeight($hImg)
   Local $ImgSize = StringSplit($Arr, '|')
   Return $ImgSize
   _GDIPlus_Shutdown()
EndFunc


смасштабировать
Код:
Func _GDIPlus_ImageResize($hImage, $hLocation, $iWidth=@DesktopWidth, $iHeight=@DesktopHeight)
	_GDIPlus_Startup()
	Local $hImage = _GDIPlus_ImageLoadFromFile($hImage)
    Local $aResult = DllCall($ghGDIPDll, 'uint', 'GdipGetImageThumbnail', 'ptr', $hImage, 'uint', $iWidth, 'uint', $iHeight, 'ptr*', 0, 'ptr', 0, 'ptr', 0)
    _GDIPlus_ImageSaveToFile($aResult[4], $hLocation)
	_GDIPlus_ImageDispose($hImage)
	_GDIPlus_Shutdown()
EndFunc
 
Верх