Войти

Показать полную графическую версию : [решено] Обрезка картинки


Страниц : [1] 2

sov44
04-05-2012, 15:50
Можно ли с помощью bat или сторонних программ обрезать края картинок jpg, расположенных "c:\WINDOWS\Web\Wallpaper\" до пропорций установленного разрешения экрана?

Iska
04-05-2012, 16:02
Можно. Либо с помощью сторонних программ, либо WSH, либо PoSH.

А зачем?

sov44
04-05-2012, 16:09
А зачем? »
Хочу добавить на установочный диск с задержкой исполнения на пару часов, чтобы после установки винды картинки фона рабочего стола были пропорциональными у пользователей с разными размерами мониторов.
п.с. желательно сделать без помощи сторонних программ.

Iska
04-05-2012, 17:51
sov44, надо понятней изъясняться.

Я понял, что основная проблема в том, что у разных пользователей мониторы с разными форм-факторами. Соответственно, скорее всего, будут и разные пропорции, у одних — 4x3, у других 16:9 и т.п.

И Вы хотите существующие изображения привести к пропорциям установленного у пользователей форм-фактора разрешения, иначе при установке «Расположение: Растянуть» у одних пользователей будет нормально, у других — изображение будет растянуто или ужато. И Вы хотите от этого избавиться. Так?

sov44
04-05-2012, 18:07
Так? »
Так.

Iska
04-05-2012, 23:10
sov44, на основе этого (http://forum.script-coding.com/viewtopic.php?pid=30088#p30088) кода сделал такое:
Option Explicit

Dim objFSO
Dim objFile

Dim strPath2Wallpapers
Dim strPath2File

Dim objImageFile
Dim objImageProcess

Dim lngScreenHeight
Dim lngScreenWidth

Dim lngDelta


Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objImageFile = WScript.CreateObject("WIA.ImageFile")
Set objImageProcess = WScript.CreateObject("WIA.ImageProcess")

strPath2Wallpapers = objFSO.BuildPath(objFSO.GetSpecialFolder(0).Path, "Web\Wallpaper")

With WScript.CreateObject("htmlfile")
With .Script.screen
lngScreenHeight = .Height
lngScreenWidth = .Width
End With
End With

If objFSO.FolderExists(strPath2Wallpapers) Then
For Each objFile In objFSO.GetFolder(strPath2Wallpapers).Files
WScript.Echo objFile.Path

objImageFile.LoadFile objFile.Path

With objImageProcess
.Filters.Add .FilterInfos("Crop").FilterID

With .Filters(1).Properties
If lngScreenHeight / lngScreenWidth > objImageFile.Height / objImageFile.Width Then
' Подрежем справа-слева
lngDelta = (objImageFile.Width - objImageFile.Height * lngScreenWidth / lngScreenHeight) / 2

.Item("Left") = lngDelta
.Item("Right") = lngDelta
ElseIf lngScreenHeight / lngScreenWidth < objImageFile.Height / objImageFile.Width Then
' Подрежем сверху-снизу
lngDelta = (objImageFile.Height - objImageFile.Width * lngScreenHeight / lngScreenWidth) / 2

.Item("Top") = lngDelta
.Item("Bottom") = lngDelta
Else
' Nothing to do
End If
End With

Set objImageFile = .Apply(objImageFile)

.Filters.Remove 1
End With

' Перезаписывать существующий файл компонент не умеет,
' потому предварительно удаляем файл…
strPath2File = objFile.Path
objFile.Delete

' Сохраняем файл под тем же именем:
objImageFile.SaveFile strPath2File
Next
Else
WScript.Echo "Wallpaper's folder [" & strPath2Wallpapers & "] not found"
End If

Set objImageProcess = Nothing
Set objImageFile = Nothing
Set objFSO = Nothing

WScript.Quit 0
Пробуйте.

Код для простоты сделан со следующими ограничениями:

* полагаем, что в папке «%SystemRoot%\Web\Wallpaper» нет иных файлов, кроме как изображений форматов, поддерживаемых библиотекой WIA;
* оригинальные файлы не сохраняются;
* изображения не масштабируются, только равномерно обрезаются до пропорций текущего разрешения экрана (и без учёта места, занимаемого панелью задач) с противоположных сторон.

sov44
04-05-2012, 23:50
Iska, а с каким расширением сохранять скрипт и в какой кодировке? :dont-know

Iska
05-05-2012, 00:21
Расширение — «.vbs», кодировка — «Windows-1251», запуск:
cscript.exe //nologo "<путь к файлу скрипта>"

sov44
05-05-2012, 00:49
Iska, не получилась обработка картинок.
Для пробы изменил путь к картинкам на strPath2Wallpapers = objFSO.BuildPath(objFSO.GetSpecialFolder(0).Path, "Web\Wallpaper1") и запустил скрипт через командное окно тотала cscript.exe //nologo "c:\перевалка\обрезка картинок.vbs"

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

Iska
05-05-2012, 04:55
Iska, не получилась обработка картинок. »
А что получилось?

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

sov44
05-05-2012, 10:14
А что получилось? »
нечего не получилось. Размеры картинок в папке Wallpaper1 не изменились.

Iska
05-05-2012, 13:25
1. И никаких сообщений, например, о найденных изображениях или об ошибках? Надеюсь, Вы запускали скрипт из командной строки?
2. А размеры точно должны были измениться?
3. Если — да, то приведите пример такого изображения и укажите форм-фактор, к которому должно было быть приведено изображение (изображение выкладывайте в архиве, а не картинкой!).

Iska
05-05-2012, 18:55
sov44, письмо получил, архив загрузил, файлы изображений опробовал. У меня всё отработало корректно, пропорции Ваших изображений поменялись в соответствии с форм-фактором текущего разрешения.

Попробуйте исполнить скрипт именно в командной строке, как я писал выше (http://forum.oszone.net/post-1910955.html#post1910955), а не из-под Total Commander'а.

sov44
10-05-2012, 00:13
Iska, пробовал запускать скрипт как с помощью батника, так и на прямую из командной строки как на рабочей системе, так и на виртуальной свежеустановленной оригинальной Windows XP. Увы, во всех случаях одна и та-же ошибка.
http://savepic.su/1940974m.jpg (http://savepic.su/1940974.htm)

Iska
10-05-2012, 05:33
sov44, так это ж совсем другое дело ;). Это очень хорошо, что ошибка есть! Ибо сразу ясно, в чём тут дело.

Установите библиотеку Download: Windows® Image Acquisition Automation Library v2.0 Tool: Image acquisition and manipulation component for VB and scripting - Microsoft Download Center - Download Details (http://www.microsoft.com/en-us/download/details.aspx?id=18287).

Foreigner
10-05-2012, 06:45
Nconvert (http://www.xnview.com/en/nconvert.html) уже советовали? Для батников самое оно.

Iska
10-05-2012, 07:53
Foreigner, думаю, будет не очень удобно вычислять конечные размеры, прежде всего из-за наличия только целочисленной арифметики.

kiripanda
10-05-2012, 08:43
Iska
не вижу проблемы, кол-во пикселей же целое число

Iska
10-05-2012, 09:14
kiripanda, а отношение ширины к высоте и наоборот?

kiripanda
10-05-2012, 09:56
Del




© OSzone.net 2001-2012