Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Обрезка картинки

Ответить
Настройки темы
CMD/BAT - [решено] Обрезка картинки

Ветеран


Сообщения: 2183
Благодарности: 721


Конфигурация

Профиль | Отправить PM | Цитировать


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

Отправлено: 15:50, 04-05-2012

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Можно. Либо с помощью сторонних программ, либо WSH, либо PoSH.

А зачем?

Отправлено: 16:02, 04-05-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Ветеран


Сообщения: 2183
Благодарности: 721

Профиль | Отправить PM | Цитировать


Цитата Iska:
А зачем? »
Хочу добавить на установочный диск с задержкой исполнения на пару часов, чтобы после установки винды картинки фона рабочего стола были пропорциональными у пользователей с разными размерами мониторов.
п.с. желательно сделать без помощи сторонних программ.

Отправлено: 16:09, 04-05-2012 | #3


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


sov44, надо понятней изъясняться.

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

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

Отправлено: 17:51, 04-05-2012 | #4


Ветеран


Сообщения: 2183
Благодарности: 721

Профиль | Отправить PM | Цитировать


Цитата Iska:
Так? »
Так.

Отправлено: 18:07, 04-05-2012 | #5


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


sov44, на основе этого кода сделал такое:
читать дальше »
Код: Выделить весь код
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;
* оригинальные файлы не сохраняются;
* изображения не масштабируются, только равномерно обрезаются до пропорций текущего разрешения экрана (и без учёта места, занимаемого панелью задач) с противоположных сторон.
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:10, 04-05-2012 | #6


Ветеран


Сообщения: 2183
Благодарности: 721

Профиль | Отправить PM | Цитировать


Iska, а с каким расширением сохранять скрипт и в какой кодировке?

Отправлено: 23:50, 04-05-2012 | #7


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Расширение — «.vbs», кодировка — «Windows-1251», запуск:
Код: Выделить весь код
cscript.exe //nologo "<путь к файлу скрипта>"
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:21, 05-05-2012 | #8


Ветеран


Сообщения: 2183
Благодарности: 721

Профиль | Отправить PM | Цитировать


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

Последний раз редактировалось sov44, 05-05-2012 в 01:03.


Отправлено: 00:49, 05-05-2012 | #9


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата sov44:
Iska, не получилась обработка картинок. »
А что получилось?

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

Отправлено: 04:55, 05-05-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Обрезка картинки

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Графика - обрезка пустых краев изображения nmn Программное обеспечение Windows 4 26-08-2010 18:25
.NET - [решено] CroppedBitmap. Обрезка изображения. Casper-SC Программирование и базы данных 1 21-08-2010 10:23
Прочие - Нужна программа, что бы заливать картинки в чаты, а не ссылки на картинки Clever fellow Программное обеспечение Windows 2 18-02-2010 17:22
Обрезка AVI Евгешка Видео и аудио: обработка и кодирование 5 31-03-2008 20:37




 
Переход