Одинаковый (постоянный) размер

  • Автор темы Автор темы Night0
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Night0

Участник
Топикстартер
Сообщения
6
Реакции
0
Есть несколько сотен битмапов с прозрачным фоном РАЗНОГО размера (5-300 мм)
Нужно чтобы все рисунки по ширине были 10 мм

Можно ли применив нужное изменение размера к одному объекту, повторить для остальных?
Похоже на Ctrl+R, только так, чтобы все остальные объекты имели размер такой, какой я ввел для предыдущего.
 
Ответ: Одинаковый (постоянный) размер

Значительно проще все это сделать в фотошопе. Скрипт File>Script>Image Processor
 
Ответ: Одинаковый (постоянный) размер

Это в принципе и есть фотошоповские файлы.
Представляет собой: изображение размером, допустим 200х200мм, прозрачный фон, в произвольном месте нарисован кроссовок размером 70х50 мм. (размеры у всех ооочень разные)

Когда я изменяю размер в фотошопе изменяется размер всего изображения (200х200)

Когда я перетаскиваю файл в корел - я там имею изображение 70х50 мм , т.е прозрачный фон не учитывается.
 
Ответ: Одинаковый (постоянный) размер

это в один клик делается макросом для CorelDRAW - wx_Tools::ForEach на моем сайте.
1. выделяем картинку и обязательно в проперти баре (вверху) вводим ее новый размер ручками, ОК
2. выделяем все картинки (и не запуская никаких других действий после изм. размера!) запускаем макрос ForEach
 
Ответ: Одинаковый (постоянный) размер

макрос для CorelDRAW - wx_Tools::ForEach
- класс. Но в нем все объекты приводятся к размерам первого по вертикали и горизонтали.
А можно ли, чтобы один размер изменился как у исходного объекта, а второй - изменился пропорционально
 
Ответ: Одинаковый (постоянный) размер

ну наверное надо замочек на боксе с размерами отжать в другое положение и все
 
Ответ: Одинаковый (постоянный) размер

wOxxOm сказал(а):
ну наверное надо замочек на боксе с размерами отжать в другое положение и все

Это влияет только на изменение размеров исходного объекта.
А макрос копирует полученные значения для остальных объектов. И вертикальный и горизонтальный
 
Ответ: Одинаковый (постоянный) размер

тогда этот макрос не поможет, т.к. он не для картинок специально написан, а только для повторения последней операции
 
Ответ: Одинаковый (постоянный) размер

Тогда вот. Мне это тоже пригодится, пока в примитиве.
Запускаем, вводим например "100 0 ap" - на всех страницах битмапы по ширине 100, по высоте - пропорция. без буквы 'a' - только на текущей странице или в выделенных объектах. Без 'p' - не будет проверять внутри поверклипов
Код:
Sub bitmapsizer()
   Static sz$
   Dim sh As Shape, sr As ShapeRange, sr2 As ShapeRange, s$, x#, y#, pg As Page, bAll%, tPClip&
   On Error Resume Next
   s = Trim$(InputBox(Replace("SizeX SizeY [AP]|0 = proportional|A = all pages|P = check powerclips)", "|", vbCr & vbTab), , sz))
   If Len(s) = 0 Then Exit Sub
   x = Left$(s, InStr(s, " ")): y = Split(LTrim$(Mid$(s, InStr(s, " "))), " ")(0)
   bAll = InStr(1, s, "a", vbTextCompare) <> 0
   tPClip = IIf(InStr(1, s, "p", vbTextCompare) <> 0, 0, cdrBitmapShape)
   If err.Number Or x < 0 Or y < 0 Then MsgBox "Bad number", vbExclamation: Exit Sub
   sz = s
   
   Set sr = ActiveSelection.Shapes.FindShapes(, tPClip)
   If tPClip = 0 Then Set sr2 = New ShapeRange
      
   ActiveDocument.Unit = cdrMillimeter
   ActiveDocument.BeginCommandGroup "resize bitmaps"
   ActiveDocument.PreserveSelection = False: Optimization = True: EventsEnabled = 0
   
   For Each pg In ActiveDocument.Pages
      If bAll Or pg Is ActivePage Then
         If bAll Or sr.Count = 0 Then Set sr = pg.FindShapes(, tPClip)
         Do
            For Each sh In sr
               If sh.Type = cdrBitmapShape Then
                  If x = 0 Then
                     If Abs(sh.SizeHeight - y) > 0.000001 Then sh.SetSize sh.SizeWidth * y / sh.SizeHeight, y
                  Else
                     If Abs(sh.SizeWidth - x) > 0.000001 Then sh.SetSize x, sh.SizeHeight * x / sh.SizeWidth
                  End If
               End If
               If tPClip = 0 Then _
                  If Not sh.PowerClip Is Nothing Then sr2.AddRange sh.PowerClip.Shapes.FindShapes
            Next
            If tPClip <> 0 Then Exit Do
            sr.RemoveAll: sr.AddRange sr2: sr2.RemoveAll
         Loop Until sr.Count = 0
      End If
   Next
   
   ActiveDocument.PreserveSelection = True: Optimization = 0: EventsEnabled = True
   ActiveDocument.EndCommandGroup
   ActiveDocument.ClearSelection
   CorelScript.RedrawScreen
   Refresh
End Sub
 
Ответ: Одинаковый (постоянный) размер

wOxxOm, спасибо!
Это как раз то - что нужно!
 
Статус
Закрыто для дальнейших ответов.