Показать полную графическую версию : [решено] Наложение таблицы(сетки) на рисунок
Здравствуйте. Есть рисунок 220*70 мм. Нужно поверх картинки нарисовать сетку (размер ячейки 10*10) с возможностью объединения этих ячеек. Подскажите какими средствами можно это осуществить. И как приблизительно. Заранее очень очень благодарен.
Сейчас сделал в Word, но может есть какой - либо еще вариант?
в Corel Draw есть Graph Paper Tool
в photoshop можно с помощью направляющих и привязки
ferget, А не могли бы вы поподробнее написать?) Совсем не знаком с работой с графикой :(
Не очень понятно, что значит с возможностью объединения этих ячеек »
Но возможно сгодится скрипт (http://www.fmwconcepts.com/imagemagick/grid/index.php) для ImageMagick.
создаете новый документ, в меню просмотр-> новая направляющая делаете 4 направляющих
две вертикальные 0см и 1см, две горизонтальные 0см и 1см
в меню просмотр-> Привязать к выбираете все привязки
карандашом обводите квадрат из направляющих, затем с помощью инструмента прямоугольная область обводите нарисованное карандашом
затем редактирование-> определить узор называете как нибудь
открываете ваш рисунок, делаете новый слой, жмете shift+backspace, в использовать: выбираете регулярный, в заказной узор, ваш узор и жмете OK
vadblm, хорошая ссылка, спасибо.
Всем спасибо, буду делать =)
Не очень понятно, что значит »
ну нужно чтобы в некоторых местах, в сетке была ячейка, например, 30*10, т.е. объединить несколько столбцов в строке нужно. Как - то, вот так :)
Сам еще не понял, что нужно именно :)
объединить несколько столбцов в строке нужно. »
Какие столбцы, какие строки? Мы же о картинке говорим, а не о таблице. Какие в изображении столбцы и строки??? Может, вам нужно покромсать картинку на тайлы, которые в свою очередь использовать фоном для ячеек таблицы?
Сам еще не понял, что нужно именно »
Ну уж постарайтесь.
Какие столбцы, какие строки? Мы же о картинке говорим, а не о таблице »
Нужно поверх картинки, "сделать" таблицу( вот в ней то уже и есть столбцы и строки)
Как то вот так :
http://s49.radikal.ru/i126/1110/6f/906f9d4c538a.jpg
Сейчас я сделал это в Word. Но в нем немного сбит масштаб...
Может, вам нужно покромсать картинку на тайлы, которые в свою очередь использовать фоном для ячеек таблицы? »
Этого хотелось бы избежать :)
LilLoco, то есть, просто нарисовать поверх изображения сетку, так?
По каким принципам, как Вы определяете, какие именно «ячейки» будут «объединены»? Или Вы заранее этого не знаете, и планируете каждый раз, под каждое изображение, проделывать сие «ручками» (поскольку заранее сказать нельзя)?
Iska, да нужно поверх просто наложить.
Расположение объединенных ячеек известно заранее.
Iska, да нужно поверх просто наложить. »
LilLoco, для ручного метода объединения можно попробовать так:
Option Explicit
Const psPixels = 1
Const psDisplayNoDialogs = 3
Dim strDocument
Dim objPhotoshop
Dim objDocument
Dim objLayerSet
Dim lngPrevRulerUnits
Dim lngPrevDisplayDialogs
Dim i
Dim j
Dim lngStep
Set objPhotoshop = WScript.CreateObject("Photoshop.Application")
objPhotoshop.Visible = True
lngPrevRulerUnits = objPhotoshop.Preferences.RulerUnits
objPhotoshop.Preferences.RulerUnits = psPixels
lngPrevDisplayDialogs = objPhotoshop.DisplayDialogs
objPhotoshop.DisplayDialogs = psDisplayNoDialogs
If objPhotoshop.Documents.Count > 0 Then
Set objDocument = objPhotoshop.ActiveDocument
Else
strDocument = "E:\Песочница\0083\Sample.jpg"
Set objDocument = objPhotoshop.Open(strDocument)
End If
Set objLayerSet = objDocument.LayerSets.Add
objLayerSet.Name = "Сетка"
' Шаг сетки в мм
lngStep = 100 * objDocument.Resolution / 25.4
For i = 0 To objDocument.Width Step lngStep
For j = 0 To objDocument.Height Step lngStep
With objDocument.ArtLayers.Add
.Move objLayerSet, 0
End With
DrawLine objPhotoshop, i, j, i + lngStep, j, 1
With objDocument.ArtLayers.Add
.Move objLayerSet, 0
End With
DrawLine objPhotoshop, i, j, i, j + lngStep, 1
Next
Next
objPhotoshop.Preferences.RulerUnits = lngPrevRulerUnits
objPhotoshop.DisplayDialogs = lngPrevDisplayDialogs
Set objLayerSet = Nothing
Set objDocument = Nothing
Set objPhotoshop = Nothing
WScript.Quit 0
'=============================================================================
'=============================================================================
Sub DrawLine(objApp, x1, y1, x2, y2, width)
Dim objAD_StartPoint
Dim objAD_EndPoint
Dim objAD_Line
Dim objAD_Shape
Set objAD_StartPoint = WScript.CreateObject("Photoshop.ActionDescriptor")
With objAD_StartPoint
.PutUnitDouble objApp.StringIDToTypeID("horizontal"), objApp.StringIDToTypeID("distanceUnit"), x1
.PutUnitDouble objApp.StringIDToTypeID("vertical"), objApp.StringIDToTypeID("distanceUnit"), y1
End With
Set objAD_EndPoint = WScript.CreateObject("Photoshop.ActionDescriptor")
With objAD_EndPoint
.PutUnitDouble objApp.StringIDToTypeID("horizontal"), objApp.StringIDToTypeID("distanceUnit"), x2
.PutUnitDouble objApp.StringIDToTypeID("vertical"), objApp.StringIDToTypeID("distanceUnit"), y2
End With
Set objAD_Line = WScript.CreateObject("Photoshop.ActionDescriptor")
With objAD_Line
.PutObject objApp.StringIDToTypeID("start"), objApp.StringIDToTypeID("paint"), objAD_StartPoint
.PutObject objApp.StringIDToTypeID("end"), objApp.StringIDToTypeID("paint"), objAD_EndPoint
.PutUnitDouble objApp.StringIDToTypeID("width"), objApp.StringIDToTypeID("pixelsUnit"), width
End With
Set objAD_Shape = WScript.CreateObject("Photoshop.ActionDescriptor")
With objAD_Shape
.PutObject objApp.StringIDToTypeID("shape"), objApp.StringIDToTypeID("lineClass"), objAD_Line
.PutBoolean objApp.StringIDToTypeID("antiAlias"), True
End With
objApp.ExecuteAction objApp.StringIDToTypeID("draw"), objAD_Shape, psDisplayNoDialogs
Set objAD_Shape = Nothing
Set objAD_Line = Nothing
Set objAD_EndPoint = Nothing
Set objAD_StartPoint = Nothing
End Sub
'=============================================================================
* работа ведётся с открытым в Photoshop'е документом, при отсутствии такового — с указанным;
* сетка рисуется текущим цветом (просто установите потребный цвет перед запуском скрипта) из горизонтальных и вертикальных линий — рёбер квадратов, каждая линия в отдельном слое (дабы можно было просто удалить слой с линией для объединения двух квадратов);
* сетка рисуется от координаты 0,0 вправо-вниз с шагом:
' Шаг сетки в 100 мм
lngStep = 100 * objDocument.Resolution / 25.4
* по окончании отрисовки не делается никаких действий по сохранению документа, закрытию Photoshop'а.
Я постарался максимально упростить пример. Код проверялся под Photoshop из CS 2 (другого под рукой не нашлось). Вполне возможно, что в новых версиях что-то поменялось и отвалится, что-то можно сделать проще и т.п.
Расположение объединенных ячеек известно заранее. »
Тогда можно попробовать обойтись более простыми средствами (вопрос только в определении соотношения между мм и пикселями в тех форматах, которые не содержат информацию о dpi).
Как думаете указывать, какие квадраты будут являться объединёнными (или отсутствующие рёбра)?
Iska, Спасибо большое!
Как думаете указывать, какие квадраты будут являться объединёнными (или отсутствующие рёбра)? »
Не совсем понял вопроса :(
lngStep = 100 * objDocument.Resolution / 25.4 »
Здесь 25.4 - это, я так понимаю, коэффициент для перевода пиксели в миллиметры? А всегда ли он такой? - Просто ставлю 10 мм шаг, отрисовывается явно ширина не в 10 мм.
Не совсем понял вопроса »
Я интересуюсь: ежели Вы заранее знаете, какие «ячейки» будут объединёнными — надо придумать какой-то способ указания этих «ячеек» программе. Тогда можно будет выполнять построение сетки полностью автоматизированно.
Здесь 25.4 - это, я так понимаю, коэффициент для перевода пиксели в миллиметры? »
Нет. 25.4 — это количество миллиметров в одном дюйме.
А всегда ли он такой? »
Ага.
Просто ставлю 10 мм шаг, отрисовывается явно ширина не в 10 мм. »
Мы берём заданный шаг, пусть 10 мм. Умножаем его на коэффициент dpi документа (если он не предусмотрен в формате документа, то Photoshop предполагает 72 dpi для документов для печати). Затем делим на 25.4 мм/дюйм. При печати изображения шаг сетки будет составлять 10 мм. То есть, меняя dpi открытого в Photoshop'е документа — Вы управляете физическим размером документа на печати.
надо придумать какой-то способ указания этих «ячеек» программе. Тогда можно будет выполнять построение сетки полностью автоматизированно »
Я думаю можно просто поудалять слои. Это единичный случай, думаю, можно не автоматизировать.
Iska, Спасибо Вам огромное за помощь и разъяснения!
Я думаю можно просто поудалять слои. Это единичный случай, думаю, можно не автоматизировать. »
Спасибо, ясно.
Спасибо, ясно. »
Это Вам спасибо ;-)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.