[Çözüldü] Grinin farklı tonlarında rastgele çıktılar elde etmek?

Başlatan 012rev3, 13 Kasım 2016 - 16:07:34

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

012rev3

Daha önce istihza forum da açtığım konu ne yazık ki ilgi bulmadı. Ben de konuyu buraya taşımayı uygun buldum.
Konu şu şekilde;
Farklı renk ve ölçülerde resim çıktısı alabilmek? (Daha ileri seviyede ise anlık hareketliliği takip edebilmek.)
Örneğin çıktı almak istediğim görsel siyah olsun istiyorum, 800x600(değişebilir) ölçeklerinde ve .jpg/.png uzantılarından birine sahip olarak kaydedilmesini. Böyle bir çıktıyı almak için ne yapmam gerekir?


Talepte bulunduğum istekler yerine getirilecek ve bir resim dosyası olarak kaydedilecek. Daha sonra ingilizce bir kaynakta şu şekilde kod buldum.
Bu kod hayretler içinde bıraktı beni. Sonra düşündüm aklımdaki şeyi yapabilirmişim ama bunu nasıl kendi isteğime göre dönüştürebilirim?
Kaynak: http://www.python-course.eu/networkx.php
import networkx as nx
import matplotlib.pyplot as plt

G=nx.path_graph(4)
cities = {0:"Toronto",1:"London",2:"Berlin",3:"New York"}

H=nx.relabel_nodes(G,cities)

print("Nodes of graph: ")
print(H.nodes())
print("Edges of graph: ")
print(H.edges())
nx.draw(H)
plt.savefig("path_graph_cities.png")
plt.show()



Örneğin şöyle bir değer üretme sistemim var. Bu değerler üzerine bir çıktı alabilmem nasıl mümkün mü?
#!/usr/bin/env python3
#-*- coding:windows-1254 -*-

import random

def sayiDegeri():
    a1 = random.randrange(0,3)
    a2 = random.randrange(0,3)
    a3 = random.randrange(0,3)
    print "Deger: ", a1, ",", a2, ",", a3
def rastgeleOran():
    oranSiyah = random.randrange(0,99)
    oranBeyaz = random.randrange(0,99)
    print "Oran: ", "%", oranSiyah, "siyah", ",", "%", oranBeyaz, "beyaz"

def renkUret():
    renk = "#"
    for i in range(6):
        renk = renk + random.choice("ABCDEF0123456789")
    print "Renk: ", renk

sayiDegeri()
rastgeleOran()
renkUret()

#0= Ortalamaya denk düşüyor, 1= Beyaz(Şimdilik/genel olarak), 2=Siyah(Şimdilik/Genel olarak). Şimdilik, 0 1 2 oranlarını geçebiliriz.
Yalnız bu kod geçici yani istediğim gibi bir üretimde bulunmuyor henüz. Şöyle ki üretilen renk kodu aslında rastgele değil, verilen yüzdelik orana göre hesaplanmalı. Yüzde 50 siyah ve yüzde 30 beyazın uygulandığını düşünürsek bunun dijital renk kodunu üretmeli. Bunları uğraşarak yapabilirim sanıyorum ancak şartlandırma konusunu anlayabilirsem. (Siyah, beyaz ve gri den hariç renk üretmeyecek. Not: Renk deme durumunda kaldım.)

Konu buradan yanıtlanamayacak kadar dallı budaklıysa okumam gereken kaynakları ekleyebilirsiniz. Yeterince açık anlatamamış da olabilirim, sormak istedikleriniz varsa lütfen belirtin.
"Her şey mümkün olduğunca basitleştirilmeli ancak sıradanlaştırılmamalıdır." Albert Einstein

ekremsenturk

Ne yapmak istediğini anlayabilmiş değilim. Renk mi üretilecek? Renk mi tesbit edilecek ? Çizim mi yapılacak ? Fotograf mı işlenecek ?

Senin kafandaki fikirlerin sadece senin kafanda canlandığını bilerek, başkalarının da senin anlatmak istedikleriniı kafalarında canlandırabileceklderi şekilde yazarsan, iletişimimiz daha kolay olur.

012rev3

[mention=610494]@ekremsenturk[/mention]
Haklısınız hocam. Hangi kısımları aktarıp aktaramadığım konusunu tam olarak belirleyemediğim için konuyu soru kısmıyla yürütmeyi uygun gördüm.
Renk mi üretilecek? Renk mi tesbit edilecek ?
Öncelikle yüzdelik oranlarda (şimdilik rastgele) siyah ve beyazın yüzdelik oranı üretilecek. Yalnız ikisinin toplamı %99'u geçmeyecek. Örneğin %40 lık beyaz şiddetimiz %50 lik siyah şiddetimiz olsun.
Bu iki değer beyaz yüzeye müdahale edebilir. Burada istisnai olarak %100 lük bir beyaz zemini düşünebiliriz. Daha sonra resim düzenleme programları mantığıyla aktaracak olursam yeni oluşturulan beyaz katman %40 (opacity) şeffaflıkla ayarlanacak. İkinci katman ise %50 lik şeffaflıkta siyah katman ile oluşturulacak. Bu iki değerin sonunda üretilen grinin renk kodu çıktı olarak görünsün. Örneğin bu söylediklerimin sonunda oluşan grinin hex kodu #b2b2b2 şeklinde. Bunu uygulamalı olarak resim düzenleme programlarından test edebilirsiniz.
Yani iki soruya cevap öncelikle belirli bir aşamadan geçilip üretilen değere göre renk tespiti yapılacak.
(Bu hex değeri görünsün. Yani çıkışta yazdırılsın, %40 beyaz, %50 siyah, hex kodu #b2b2b2 gibi. Hex kodu kendinden öncekilerinden bağımsız hareket edemez. Ayrıca siyah ve beyazın toplam yüzdelik değeri %99 u geçemez.)
Aynı zamanda bu renk çıktıya yansıyacak.

Yani sonuç olarak #b2b2b2 değerine sahip renk 800x600 ölçeklerinde .jpg/.png formatında kaydedilecek.

Ekleme: Yüzdelik oranlar rastgele seçilecek.

Çizim ve fotoğraf işleme konusu şimdilik bu konya dahil değil.
"Her şey mümkün olduğunca basitleştirilmeli ancak sıradanlaştırılmamalıdır." Albert Einstein


012rev3

[mention=610525]@ekremsenturk[/mention]
Kaynaklar için teşekkür ederim.
Basit örnek kod yazabilecek olan arkadaş olursa daha bi mutlu olabileceğimi belirtmeliyim.
"Her şey mümkün olduğunca basitleştirilmeli ancak sıradanlaştırılmamalıdır." Albert Einstein

ShangriLa

Tam olarak anlayamadım ama şöyle bir şey yazabildim, programın altında örnekler mevcut:


#!/usr/bin/env python3

from random import randrange
from PIL import Image
from PIL import ImageColor


def resim_kaydet(dosya, renk1, r1_yuzde, renk2, r2_yuzde):
    r1 = ImageColor.getrgb(renk1)
    r2 = ImageColor.getrgb(renk2)

    if r1_yuzde + r2_yuzde > 100:
        raise Exception("Renk yüzdeleri toplamı 100 den büyük olamaz")

    ortalama_rgb = (int((r1[0] * r1_yuzde / 100 + r2[0] * r2_yuzde / 100)),
                    int((r1[1] * r1_yuzde / 100 + r2[1] * r2_yuzde / 100)),
                    int((r1[2] * r1_yuzde / 100 + r2[2] * r2_yuzde / 100)))

    img = Image.new("RGB", (800, 600), ortalama_rgb)
    img.save(dosya)


def rastgele_renk():
    (r, g, b) = (randrange(0, 255), randrange(0, 255), randrange(0, 255))
    return "#{:02x}{:02x}{:02x}".format(r, b, g)


# Rastgele iki rengin ortalamasını dosya.png'e kaydeder
resim_kaydet("dosya1.png", rastgele_renk(), 50, rastgele_renk(), 50)

# Yüzde 90 siyah, yüzde 10 beyaz dosya2.png'e kaydeder
resim_kaydet("dosya2.png", "#000000", 90, "#ffffff", 10)

# Yüzde 10 siyah, yüzde 90 beyaz dosya3.png'e kaydeder
resim_kaydet("dosya3.png", "#000000", 10, "#ffffff", 90)

# Yüzde 50 kırmızı, yüzde 50 beyaz dosya4.png'e kaydeder
resim_kaydet("dosya4.png", "#ff0000", 50, "#ffffff", 50)
Ubuntu Mate Trusty

012rev3

[mention=610549]@ShangriLa[/mention]
Harikasınız. Çok teşekkür ederim.
Program farklı renklerde resimler üretti, en azından bu aşamaya gelmek çok güzel.
Grayscala moduna geçilip gerekli bilgilerin de verilmesi sağlanırsa amacımıza yaklaşmış oluruz.
"Her şey mümkün olduğunca basitleştirilmeli ancak sıradanlaştırılmamalıdır." Albert Einstein

ShangriLa

Eğer grayscale moddan kastın rastgele üretilen rengin siyah ve tonları olması ise, rastgele_renk fonksiyonunu şöyle düzenleyebilirsin:


def rastgele_renk():
    return "#{:02x}{:02x}{:02x}".format(*[randrange(0, 255)]*3)
Ubuntu Mate Trusty

012rev3

Emekleri için [mention=610558]@ShangriLa[/mention] 'ya çok teşekkürler.
Konu şu şekilde çözülmüştür;
#!/usr/bin/env python3

from random import randrange
from PIL import Image
from PIL import ImageColor


def resim_kaydet(dosya, renk1, r1_yuzde, renk2, r2_yuzde):

    r1 = ImageColor.getrgb(renk1)
    r2 = ImageColor.getrgb(renk2)

    if r1_yuzde + r2_yuzde > 100:
        raise Exception("Renk yuzdeleri toplami 100 den buyuk olamaz")

    ortalama_rgb = (int((r1[0] * r1_yuzde / 100 + r2[0] * r2_yuzde / 100)),
                    int((r1[1] * r1_yuzde / 100 + r2[1] * r2_yuzde / 100)),
                    int((r1[2] * r1_yuzde / 100 + r2[2] * r2_yuzde / 100)))

    print("{}: {} %{}, {} %{} ortalama: #{:02x}{:02x}{:02x}"
          .format(dosya, renk1, r1_yuzde, renk2, r2_yuzde, *ortalama_rgb))

    img = Image.new("RGB", (800, 600), ortalama_rgb)
    img.save(dosya)


def rastgele_renk():
    return "#{:02x}{:02x}{:02x}".format(*[randrange(0, 255)]*3)


for (i, j) in zip(range(3), [1, 0, 2]):
    rastgele_yuzde = randrange(i * 33, (i + 1) * 33)
    resim_kaydet("dosya{}.png".format(j),
                 "black",
                 rastgele_yuzde,
                 "white",
                 100 - rastgele_yuzde)
"Her şey mümkün olduğunca basitleştirilmeli ancak sıradanlaştırılmamalıdır." Albert Einstein